Стоит помнить, что в 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, что бы далеко не ходить:
В общем, местоположение при тестах надо учитывать, иначе при смене сервера перед клиентом будет как-то неудобно)) Вообще, на глаз заметно быстрей страница открывается, если все на сайте оптимизировать, переехать на SSD VPS в Москве, и потом показать клиенту, чтобы он разницу почувствовал, толк будет, работа выполнена.
Я как-то показывал клиенту, когда делал по шагам, он разницы не почувствовал, ну так, что-то говрит есть)) Так что, лучше частями не показывать, делать надо полную оптимизацию и потом показывать клиенту, иначе он ничего не почувствует, т.к. у него дома Webstrim 1Mb/s OMG))
Scrooge, gtmetrix лучше как перечень рекомендаций использовать. Он по умолчанию загружает сайт на сервер в америке, а российских серверов у него нет вообще, поэтому общее время загрузки для него больше зависит от количества файлов которые нужно загрузить, чем от оптимизации или их размера. За все время был только один клиент, который просил оптимизировать сайт и то только потому что google page speed показал не очень высокий балл. Сейчас есть пара серверов на hetzner'е, пинг и скорость загрузки от них (Германия) в среднем лучше, чем у многих местных хостингов, правда, в основном это было связано с качеством связи у местных провайдеров.
У меня на Новотелекоме в Новосибирске пинги практически до всех зарубежных хостеров большие 80-140, либо трасерты большие и полумертвые. А если Новотелеком во время работ переключают на какой-то резервный канал, то там вообще засада, поэтому я только в Москве сейчас VPS покупаю, ну и сайты конечно только местные делаю, Новотелеком самый крупный провайдец в Новосибирске.
У меня при этом возможность логина отваливается. И пока висит вот эта строка '/<sc ript.+?src=".+?kernel_main\/kernel_main\.js\?\d+"><\/sc ript\>/', не реагирует на вход.
dfv Abu, заметка предназначена, скорее для продвинутых пользователей битрикса. Крайне не рекомендую использовать этот код, если нет ясного понимания, что отвалится и как это починить.
Мне кажется, что проблему отключения лишних файлов лучше решать по-другому: у меня распотрошен <?$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С-Битрикс».