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

1k
Алексей,

Добиваю 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>' . $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>' . $jsInline . "</script>", $content);
		}
	}
}

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

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

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

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

результаты google pagespeed возможно ли быстрее

Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 21 августа 2021 | Обновлено 3 октября 2022
производительность, костыли, css
Поделиться
Похожие статьи
Сдвиг страницы из-за flex order
Попался интересный случай. На сайте шапку переместили ближе к футеру, чтоб контент страницы был выше...
Читать дальше » 0
Алексей,
Загрузка jq плагинов по необходимости
Небольшой пример, как убрать из загрузки fancybox если на странице он не используется.
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
5 ноя 2021
Ну не if $USER->IsAdmin(), а: $request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest(); if( !$request->isAdminSection() ){
Алексей
5 ноя 2021
Сергей, можно и так, но тогда в публичной части сайта могут быть проблемы (в режиме правки например)
Алексей
5 ноя 2021
Сергей, щас подумал, можно исключить скрипты и стили ядра, что бы они не инлайнились, тогда проверку на админа делать не надо. Попробую как-нибудь.
Добиваю Google Pagespeed, до идеального результата осталось несколько пунктов. На данный момент пришлось "заинлайнить" стили и js для того, чтобы не было лишних запросов к серверу.