Повышение производительности и уменьшение скорости загрузки страниц для конечного пользователя - вот что не дает мне покоя последние 2 месяца. Добравшись до оптимизации загрузки JS на страницу - с удивлением принял тот факт, что CJSCore::Init не имеет возможности подгрузить скрипт с флагом async - что пусть и не критично, но при большом количестве логики на клиенте было бы приятным дополнением. При изучении всех страниц текущего проекта обнаружилось куча разноверсионных экземпляров jQuery, jQuery-ui, Bootstrap и прочих популярных JS-библиотек. В результате было решено сделать модуль-обертку для загрузки JS средствами API фреймворка, управления версионностью всей этой лабуды, исключения дублирования и, как приятное дополнение - возможностью задавать флажок async. Если основной функционал модуля другим разработчикам может и не понадобиться, то вот увидеть флажок для задания async в CJSCore::Init - было бы приятно из коробки. Тем более, что в ядро добавить нужно всего 1 условие и 1 строку (я проверил ).
Илья, похоже мы с Вами товарищи по несчастью. Я тоже последние полгода жую тему клиентской оптимизации в битриксе и в особенности механизм объединения CSS/JS. Кажется весь код соответствующих методов я знаю наизусть.
Нашел за это время о ооочень много "странных" если не сказать хуже решений. Самое ужасное из них наверное широкой публике не известно. А заключается оно в том, что как только вы включаете объединение JS битрикс ВНИМАНИЕ добавляет в файл kernel.js ВСЮ СВОЮ JS БИБЛИОТЕКУ даже если вы ни одного файла из нее не запрашивали! Чтобы непосвященным стало понятно это дополнительно 600Кб JS-кода. А jQuery для примера около 100Кб.
Примерно 2 недели ушло, чтобы убедить поддержку что это косяк / так быть не должно / руки бы оторвать тому кто это писал. Сейчас тикет ушел в разработку, но что-то мне подсказывает что крайне неохотно эта проблема будет решаться. Так что на всякий случай тоже создал идею http://idea.1c-bitrix.ru/8799/
Шкарупа Алексей, честно говоря, я вообще с опаской отношусь к "упаковыванию" JS в один kernel.js (в текущем проекте) - уж очень разнородный набор на каждой странице + я надеюсь что разные файлы можно быстрее стащить с разных CND-серверов. Но вы правы - галочка "skip_core" для собранного файла должны несомненно быть!
Кстати, если интересно 100KB загруженных асинхронно дали 2% производительности для мобильных и 4% для десктопов по версии Google PageSpeed Insights.
Жуков Евгений, что значит невозможен async? А если у библиотеки нет зависимостей? Или даже если есть, то что мешает скачать "родительскую" требуемую библиотеку синхронно, а зависящую асинхронно? А если у меня не библиотека, а файл с набором обработчиков которые работают только после document.ready - почему его нельзя скачать асинхронно?
Если быть более точным - практически невозможен. Максимум, чего можно достичь - асинхронной загрузки Вашей собственной библиотеки, которая: 1. не зависит ни от одной дефолтной библиотеки продукта 2. не требует других библиотек (jQuery, etc) Все дефолтные библиотеки продукта имеют зависимости и должны загружаться в жестко заданном порядке.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».