Выводим css стили в тело и сжимаем html в 1 строку, удаляем css комментарии
(исправляя относительные пути изображений)
Добавляем в init.php и радуемся (или нет) как гугл прибаляет 10-15 балов
<? | |
// Событие получения буфера контента перед выводом | |
\Bitrix\Main\EventManager::getInstance()->addEventHandler("main", "OnEndBufferContent", "OrContentCssInline"); | |
function OrContentCssInline(&$content) | |
{ | |
global $USER; | |
// Только для пользователей делаем | |
if (!$USER->IsAdmin()) { | |
// Ищем все теги link | |
preg_match_all("/\<link.*\>/", $content, $styleFiles); | |
//Минификация контента | |
$useCompress = "Y"; | |
// Максимальный размер файла css для вытаскивания его в тело файла | |
$weight = 128; | |
if (!empty($styleFiles[0])) { | |
// Ищем картинки и файлы с относительной папкой | |
$dataInCssFolder = array( | |
"/url\s?\([\"']?((?!'?\"?data:image)[\w\.][\/a-zA-Z\.\_\-\,]+)[\"']?\)/sU" | |
); | |
foreach ($styleFiles[0] as $style) { | |
// Если это не .css файл или это print стили - пропускаем | |
if (strpos($style, ".css") === false || strpos($style, "media='print'") !== false || strpos($style, 'media="print"') !== false) { | |
continue; | |
} | |
//Собираем все пути css файлов | |
preg_match_all("/href=[\",'](.*\.css).*[\",']/sU", $style, $findFile); | |
// Пути файлов | |
$filePath = $findFile[1][0]; | |
if ($filePath) { | |
if (file_exists($_SERVER["DOCUMENT_ROOT"] . $filePath)) { | |
// Размер файла показываетсяв в байтах, а нам кб нужны | |
$weightFile = (filesize($_SERVER["DOCUMENT_ROOT"] . $filePath) / 1024); | |
if ($weightFile < $weight) { | |
// Дериктория файла: | |
$convertedFile = dirname($filePath) . "/"; | |
// Подмена для относительных изображений | |
$replacementData = array("url('" . $convertedFile . "$1')"); | |
// Читаем и преобразовываем css | |
$fileInline = file_get_contents($_SERVER["DOCUMENT_ROOT"] . $filePath); | |
$fileInline = preg_replace($dataInCssFolder, $replacementData, $fileInline); | |
// Заменяем в контенте | |
$content = str_replace($style, '<style type="text/css">'. $fileInline . "</style>", $content); | |
} | |
} | |
} | |
} | |
} | |
// Сжатие html | |
if ($useCompress == 'Y') { | |
$content = preg_replace( | |
array( | |
// css комментарии | |
"/\/\*.*?\*\//si", | |
// Пробелы переносы | |
"/(\s)+/si" | |
), | |
array( | |
"", | |
" " | |
), | |
$content | |
); | |
} | |
// Время выполнения скрипта: 0.0037 сек. (На стандартном шаблоне и файлах bitrix eshop) | |
} | |
} |