https://developers.google.com/web/funda ... nce/http2/
for opencart V3 you can add this to the system/library/response.php class after
Code: Select all
if ($this->output) {
Either individual (per asset), per asset type or all consolidated in one header.
Code: Select all
// HTTP/2 push asset headers
// Which assets to push
$pushCss = true;
$pushJs = true;
$pushFont = false;
$pushImage = true;
$pushMp3 = true;
// All assets in a single link header, overrides $pushIndividual
$pushConsolidate = false;
// Each asset in a separate link header otherwise one link per asset type
$pushIndividual = false;
// Array declarations
$headersJs = array();
$headersCss = array();
$headersFont = array();
$headersImage = array();
$headersMp3 = array();
$headersAll = array();
// Find the assets in the output, css, javascript, fonts, audio and images
$regexp = '#(src|href)="([^"]+\.(css|js|png|svg|gif|jpg|webp|woff2|mp3)(\?[^"]+)?)"#';
if (preg_match_all($regexp, $this->output, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$file = $match[2];
$type = $match[3];
if ($type === 'js') {
if ($pushJs) $headersJs[] = sprintf('<%s>; rel=preload; as=%s', $file, 'script');
} elseif ($type === 'css') {
if ($pushCss) $headersCss[] = sprintf('<%s>; rel=preload; as=%s', $file, 'style');
} elseif ($type === 'woff2') {
if ($pushFont) $headersFont[] = sprintf('<%s>; rel=preload; as=%s', $file, 'font');
} elseif ($type === 'mp3') {
if ($pushMp3) $headersMp3[] = sprintf('<%s>; rel=preload; as=%s', $file, 'audio');
} else {
if ($pushImage) $headersImage[] = sprintf('<%s>; rel=preload; as=%s', $file, 'image');
}
}
$matches = null;unset($matches);
if ($pushConsolidate) {
$headersAll = array_merge($headersCss,$headersJs,$headersFont,$headersImage,$headersMp3);
$headersAll = array_unique($headersAll);
$headersAll = implode(',',$headersAll);
if ($headersAll) header('Link: '.$headersAll, false);
} else {
if ($pushCss) {
$headersCss = array_unique($headersCss);
if ($pushIndividual) {
foreach($headersCss as $headerCss) header('Link: '.$headerCss, false);
} else {
$headersCss = implode(',',$headersCss);
if ($headersCss) header('Link: '.$headersCss, false);
}
}
if ($pushJs) {
$headersJs = array_unique($headersJs);
if ($pushIndividual) {
foreach($headersJs as $headerJs) header('Link: '.$headerJs, false);
} else {
$headersJs = implode(',',$headersJs);
if ($headersJs) header('Link: '.$headersJs, false);
}
}
if ($pushFont) {
$headersFont = array_unique($headersFont);
if ($pushIndividual) {
foreach($headersFont as $headerFont) header('Link: '.$headerFont, false);
} else {
$headersFont = implode(',',$headersFont);
if ($headersFont) header('Link: '.$headersFont, false);
}
}
if ($pushImage) {
$headersImage = array_unique($headersImage);
if ($pushIndividual) {
foreach($headersImage as $headerImage) header('Link: '.$headerImage, false);
} else {
$headersImage = implode(',',$headersImage);
if ($headersImage) header('Link: '.$headersImage, false);
}
}
if ($pushMp3) {
$headersMp3 = array_unique($headersMp3);
if ($pushIndividual) {
foreach($headersMp3 as $headerMp3) header('Link: '.$headerMp3, false);
} else {
$headersMp3 = implode(',',$headersMp3);
if ($headersMp3) header('Link: '.$headersMp3, false);
}
}
}
}
// HTTP2 push headers