CSS, JS inline в Битрикс

281
Алексей,

Добиваю Google Pagespeed, до идеального результата осталось несколько пунктов. На данный момент пришлось "заинлайнить" стили и js для того, чтобы не было лишних запросов к серверу.

результаты google pagespeed 100 из 100

Добиваю Google Pagespeed, до идеального результата осталось несколько пунктов. На данный момент пришлось "заинлайнить" стили и js для того, чтобы не было лишних запросов к серверу.

/**
 * Инлайнит стили и скрипты
 */
EventManager::getInstance()->addEventHandler("main", "OnEndBufferContent", "inlineCssJs");

function inlineCssJs (&$content) {
	global $USER;
	if (!$USER->IsAdmin()) {
		preg_match_all("/\<link.*href=\"(.*\.css).*\>/i", $content, $matches);
		foreach ($matches[1] as $i => $cssPath) {
			$cssInline = file_get_contents($_SERVER["DOCUMENT_ROOT"] . $cssPath);
			$content = str_replace($matches[0][$i], '<style type="text/css">' . $cssInline . "</style>", $content);
		}
		
		preg_match_all("/\<script.*src=\"(.*\.js).*\>/i", $content, $matches);
		foreach ($matches[1] as $i => $jsPath) {
			$jsInline = file_get_contents($_SERVER["DOCUMENT_ROOT"] . $jsPath);
			$content = str_replace($matches[0][$i], '<script type="text/javascript">' . $jsInline . "</script>", $content);
		}
	}
}

Под админом немного разваливается админка, поэтому её пришлось исключить. Скрипт костыльный, берет со страницы js и css, получает содержимое файлов и вставляет на страницу.

результаты google pagespeed после того как стили и js были вставлены напрямую в страницу

Так же добавил размеры картинок (ни на что не повлияло) и немного почистил css, убрав те стили что не использую.

На десктопе все метрики стремятся к нулю. Возможно ли сделать еще быстрее?

результаты google pagespeed возможно ли быстрее
Опубликовано 21 августа 2021 | Обновлено 19 октября 2021
производительность, костыли, css
Поделиться
Комментарии
Авторизуйтесь чтобы получать уведомления об ответе
5 ноя 2021
Ну не if $USER->IsAdmin(), а: $request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest(); if( !$request->isAdminSection() ){
Алексей
5 ноя 2021
Сергей, можно и так, но тогда в публичной части сайта могут быть проблемы (в режиме правки например)
Алексей
5 ноя 2021
Сергей, щас подумал, можно исключить скрипты и стили ядра, что бы они не инлайнились, тогда проверку на админа делать не надо. Попробую как-нибудь.
Добиваю Google Pagespeed, до идеального результата осталось несколько пунктов. На данный момент пришлось "заинлайнить" стили и js для того, чтобы не было лишних запросов к серверу.