Стоит помнить, что в head страницы bitrix подключает свои служебные файлы, как минимум эти:
kernel_main.js
kernel_main.css
Что интересно - не авторизованным, простым посетителям эти файлы даром не нужны, но на них уходят 2 GET запроса и примерно 273 кб трафика.
Внимание! Файл kernel_main.css в режиме сжатия и объединения CSS сохраняет там содержимое style.css кастомных шаблонов компонентов, так что будьте внимательны! [spoiler] Итак, в init.php пишем следующий код:
Теперь сайт грузится быстрее =) я проверяю сайты на скорость здесь и здесь.
P.S. Есть мнение, что обработка страницы регулярным выражением ресурсоемко. Но практика показывает, что время генерации страницы, если и увеличивается, то не сильно, а вот экономия ~300 кб трафика на каждом хите - это существенно. Простая математика: ресурс имеет 3000 уников в сутки умножаем на 300кб - получаем 900мб лишнего трафика в сутки, или 27 гб в месяц...
UPD1: Выложил вторую версию кода. С первой в админку не зайти UPD2: Не забываем грамотно подключать скрипты в init.php. Еще этот код есть где-то в документации, но пока не нашел. UPD3: Добавил возможность оставлять скрипты на определенных страницах. Для этого в "Управлении структурой" надо добавить новое свойство страниц "save_kernel", если равно "Y", то скрипты останутся. Это нужно для страниц, где используется штатный видео-плеер. UPD4: Обновил код, для ситуаций, когда не включено объединение и сжатие CSS, JS. UPD5: Внимание! Обратите внимание на пробелы в script и link - их нужно будет убрать в вашем коде. UPD6: Код для init.php, что бы далеко не ходить:
Мне кажется, что проблему отключения лишних файлов лучше решать по-другому: у меня распотрошен <?$APPLICATION->ShowHead();?> и сейчас у меня частично справляется с этой задачей конструкция:
она прячет все лишние для неавторизованных посетителей файлы, за исключением /kernel_main/kernel_main.css который выводится, вместе с стилями основного шаблона и форума вызовом:
<?$APPLICATION->ShowCSS();?>
т.е. имхо, остается только выкосить функцию подключения /kernel_main/kernel_main.css из <?$APPLICATION->ShowCSS();?> и вставлять в шаблон конструкцию типа:
имхо, такое решение - рациональнее добавления обработчика в init.php проблема в том, что я не могу найти где происходит это подключение kernel_main.css, дабы его удалить.
Левшин Николай, если проголосуете за идею http://idea.1c-bitrix.ru/to-add-event...mbine-css/ то в обработчике события получится найти, где подключается kernel_main.css и удалить его из объединения CSS. P.S. Конечно, если идея дойдет до разработчиков битрикса и они все таки добавят целых 4 строки в свой код! Сказка, конечно, но мы должны верить и бороться за удобный framework
Вы уверены, что Kernel JS не нужно не авторизованным пользователям? Мне вот пришлось наоборот добавить эту библиотеку, т.к у не залогиненных юзеров в консоли возникают ошибки
BX.setJSList is not a function(anonymous function)
Uncaught TypeError: BX.setCSSList is not a function(anonymous function)
Uncaught TypeError: BX.ready is not a function
Из-за этих ошибок у меня не работала корзина на сайте. Добавил в шаблон компонента код
Антон Губарев написал: какое не костыльное решение можете предложить?
Не использовать ShowHead() и ShowCSS(), ShowHeadScripts(), а для своих стилей и скриптов использовать сборщик типа grunt-а и подключать html тегом по одному css и js.
Антон Губарев написал: к сожалению все что не стандартно в Битрикс вызывает необходимость костылей.
На многие вещи есть события, не все документированы, но по исходникам поискать можно.
Хорошее решение, но думаю что код $content = preg_replace("/\n{2,}/", "\n\n", $content); лучше заменить на $content = preg_replace("/[\r\n]{2,}/", "\r\n", $content); и достаточно вызова в последней функции deleteKernelCss
Андрей Петрович Мастеров написал: Хорошее решение, но думаю что код $content = preg_replace("/\n{2,}/", "\n\n", $content); лучше заменить на $content = preg_replace("/[\r\n]{2,}/", "\r\n", $content);
Оставлять придется для раздела каталога, а то умный фильтр перестает показывать количество отобранного товара, по крайней мере на 1 проекте так случилось.
Лебедев Александр, с композитом по-идее всё тоже самое, т.к. композит отдает ранее созданную версию страницы и реплейс буфера будет работать. Тут проблема в другом — скрипты ядра битрикса уже будут нужны и удалять их не стоит, если композит у вас нативный. Я предпочитаю весь динамический контент своими скриптами доставать из своих же ajax-сервисов. Так и билд один получается и больше контроля над системой... но это уже совсем другая история
Через буферизацию на мой взгляд не совсем красивый Можно отнаследоваться от CMain сделать кастомный метод на основе ShowHead() , добавить распознавание публички/админки, и выдавать набор скриптов и стилей без kernel_mail, если находимся в публичке. Естественно, в header.php мы используем кастомный ShowHead вместо штатного
Сергей Гладышев, заметка уже старая, но в целом, рабочая. Если приходится брать битрикс, то лучше в комплекте с каким-нибудь SPA angular/vue/react — это избавляет от мучений и борьбы с шаблонами и компонентами битрикса.
еще пара строк для удаления новых горе-задумок: '/<sc ript.+?src=".+?bitrix\/js\/main\/loadext\/loadext[^"]+"><\/sc ript\>/', '/<sc ript.+?src=".+?bitrix\/js\/main\/loadext\/extension[^"]+"><\/sc ript\>/',
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».