Стоит помнить, что в 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, что бы далеко не ходить:
Немножко поругаю Ваше решение, не обижайтесь. Делать так нехорошо. Каждый стиль и скрипт обычно для чего-то нужен, а задача которую решаете вы делается проще.
Как именно сейчас обстоит дело с автоподключением JS-библиотеки BX.core можно уточнить в техподдержке. В последний раз когда я касался этого вопроса необходимо было: а) Убрать в настройках главного модуля флажки про "показывать сообщение об окончании сессии" (то самое желтое окошко) и "продлевать авторизацию" б) Отключить модули которые при их установке в систему требуют BX.core (к таким например относится модуль pull) И после этого лишние скрипты/стили пропадали.
Шкарупа Алексей, хорошо, что добавили про сохранение сессии, если эту галочку не убирать, то лишних файлов еще больше. Приведенный в заметке список, это то, что остается после отключения уведомлений, о которых вы пишете. P.S. И код я испытывал на редакции Старт - там нет модуля pull
Постоев Олег, я о том говорю, что вместо указанного решения можно и нужно просить помощи от техподдержки чтобы они подсказали что не так и откуда берутся эти скрипты/стили ядра на лице сайта
Левый Иван, оказывается, часть этих скриптов необходима для воспроизведения видео штатным плеером. Так что отключать их нужно с умом или на определенных страницах оставлять. Как-то по условию, наверное.
Постоев Олег, видимо. Попробуем сделать так. В одной из веток форума с вашим участием читал, что разработчики пофиксят подгрузку данных скриптов для неавторизованных юзеров. Но увы, грузит и добавляет лишние запросы до сих. Жаль, что не прислушались.
Бородаенко Денис, решение хорошее, но так не получится управлять отдельно каждым подключаемым скриптом/стилем. Практика показывает, что иногда это нужно.
Удивительно даже не то, что эти скрипты есть, а то, что они не минимизированы хотя бы. Бородаенко Денис, не прокатит, если включен режим сжатия и объединения CSS.
Фаст Александр написал: Удивительно даже не то, что эти скрипты есть, а то, что они не минимизированы хотя бы.
В одной из других подобных тем один из разработчиков битрикса ответил примерно так: "включайте gzip на сервере". Это не цитата, но смысл таков, что заниматься этим вопросом они не хотят, ведь есть gzip. Что бы хоть как-то изменить ситуацию я добавил идею, надеюсь это поможет двигаться в сторону оптимизации.
А яксы стандартных компонентов в публичной части работают при отключении библиотек ядра? Помню на двух сайтах не работали без $APPLICATION->ShowHead(), что-то еще было, но было это 1-1,5 года назад, может что-то уже и изменилось, надо разобраться с этим.
Scrooge, на сколько я знаю - нет, JS практически всех модулей завязан на этом ядре. На сайтах визитках в первую очередь страдает компонент вывода карт, на бмзнесе - корзина, но её без штатной библиотеки почти нереально запустить, велики трудозатраты. А вот карты можно заменить обычным конструктором.
Постоев Олег, а я сейчас понял саму идею, это очень хрошо подходит для сайтов, где не нужен аякс - визитки, блоги и т.д., просто я одни магазины делаю последние 2 года, только про них сразу и думаю)) Ок, я добавил в закладки, как-нибудь поэксперементирую, люблю эту тему по оптимизации, очень рад, что я не один!
Сделал замеры на своем сайте в режиме dev без кеширования на хостинге Бегет, завтра буду переносить сайт на SSD VPS в Москве, если Вам будет интересно, могу поделиться результатом только переноса сайта на VPS с shared Бегет))) Было: https://monosnap.com/image/cN9j01AQqdo...HHBGNx.png
Scrooge, SSD поможет быстрее архивирвать сайты, переносить, распаковывать... время загрузки страницы принципиально не меняется. Этим летом переезжали с HDD на SSD. Все таки верстка и разработка имеют очень большую роль, я бы даже сказал, значительно бОльшую чем сервер, если это конечно не пентиум 2 с 50 сайтами.
Постоев Олег написал: Все таки верстка и разработка имеют очень большую роль, я бы даже сказал, значительно бОльшую чем сервер, если это конечно не пентиум 2 с 50 сайтами
Все верно! А меня интересуют показатели сжатия nginx и сравнение, насколько может улучшить переезд ответ сервера, отдачу, размер страницы и т.д., по сравнению с shared, вот как-то так. Не именно SSD, но все равно, он имеет значение во всех операциях с диском.
В общем, местоположение при тестах надо учитывать, иначе при смене сервера перед клиентом будет как-то неудобно)) Вообще, на глаз заметно быстрей страница открывается, если все на сайте оптимизировать, переехать на 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С-Битрикс».