30  /  36

Уменьшение размеров дистрибутива

Просмотров: 26246
Дата последнего изменения: 16.02.2023
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5

   Проблема дублирования и ее решение

Дублирование — одна из самых явных проблем, которая может привести к следующим последствиям:

  • Увеличение размера дистрибутива.
  • Некоторое увеличение времени установки за счет копирования и обработки продублированных файлов.
  • Сильное увеличение временных затрат на внесение изменений, так как приходится вносить их во все копии файлов.
  • Повышение вероятности ошибки за счет не внесенного изменения в одну из копий.

Хорошим примером проблемы дублирования является решение С 1 февраля 2023 года продажа данного решения прекращена. «Официальный сайт государственной организации», версия от 03.08.2010. Это решение включает себя 8 различных видов сайта, частично отличающихся как своей структурой, так и набором демо-данных. А также четыре шаблона дизайна, которые можно использовать для любого вида сайта.

Отбросим файлы самой редакции платформы Bitrix Framework и оставим для анализа только модуль gossite и мастер установки bitrix:government. Вместе они имеют размер 274 МБ и состоят из 13 867 файлов и 7 940 каталогов. Эти цифры не назовешь маленькими.

Рассмотрим основные случаи дублирования в этом решении:

  1. В модуле gossite есть каталог установки следующих кастомизированных и собственных компонентов: desktop, header, iblock.wizard, menu, support.ticket.list. В то же время в папке /public мастера установки bitrix:government можно увидеть папку /bitrix, содержащую набор компонентов и гаджетов. Сравнив список компонентов, мы увидим те же самые названия, и дополнительный компонент structure.visual. Все они копируются на этапе установки сервисов в скрипте /wizards/bitrix/government/site/services/files/bitrix.php следующим кодом:
    CopyDirFiles( 
    	WIZARD_ABSOLUTE_PATH."/site/public/".LANGUAGE_ID."/bitrix/",
    	WIZARD_SITE_PATH."/bitrix/",
    	$rewrite = false, 
    	$recursive = true
    );
    Исходя из кода, копирование проводится без перезаписи, поэтому актуальными являются компоненты, устанавливаемые вместе с модулем.
  2. Публичная часть мастера содержит папку /common для общих файлов, а также папки для каждого из типов сайта. По логике установки сервисов первым копируется содержимое папки выбранного вида сайта, а потом поверх него содержимое папки с общими файлами.

    При беглом осмотре можно заметить, что каталог /video (15,7 МБ) из общих файлов дублируется также в четырех видах сайта, причем видеофайлы идентичны. А содержимое папки /upload из общих файлов частично дублируется для сайта прокуратуры.

    В папке /upload/ сайта прокуратуры присутствует каталог /iblock, дублирующий файлы для установки инфоблоков.

    Также в каталогах разных типов сайтов были другие полностью дублирующиеся файлы и каталоги, которые можно вынести в /common.
  3. В базовом шаблоне дизайна (modern) в цветовых схемах продублировано много шаблонов компонентов из самого шаблона. Часть из них дублируются полностью, для части есть несколько отличающихся файлов. В последствии очень легко не внести изменения в какую-либо из цветовых схем и в итоге запутаться, где находится актуальная версия. Да и объем работы при правке этих шаблонов возрастает в несколько раз (по числу цветовых схем в шаблоне). Поэтому все дублирующиеся части из них лучше удалить.
  4. В каталоге установки сервисов для каждого типа сайта создан отдельный набор данных для инфоблоков. Выбор, какой именно набор ставить производился в файле описания сервисов .services.php. С одной стороны это удобно, но с другой стороны дублирование информации сильно увеличивается за счет дополнительных файлов инфоблоков. Например, при одинаковых альбомах в фотогалерее, или одинаковых наборах документов.

Решением этой проблемы стало объединение общих инфоблоков в один каталог. При каких-либо отличиях в настройках или содержании инфоблоков для каждого типа сайта сохранялся свой xml файл с добавлением префикса по типу сайта, но все они использовали уже общий набор дополнительных файлов. Выбор что устанавливать стал проводиться в скрипте установки инфоблока.

Над последней версией дистрибутива решения были проведены работы по устранению указанных выше проблем. В конечном итоге после замены двух шаблонов дизайна новыми, дополнения демо-данных и прочих плановых доработок, совокупный размер мастера и модуля уменьшился до 141 МБ, а количество файлов и каталогов уменьшились до 8 889 и 4 588 соответственно.

  Другие советы по уменьшению размера дистрибутива

  1. Не используйте в дистрибутиве большие видео/аудио файлы.
  2. Исключайте из дистрибутива все кастомизированные шаблоны компонентов, которые в ходе разработки перестали где-либо использоваться
  3. Выносите общие для всех дизайнов шаблоны компонентов в отдельный каталог. Для самостоятельных решений их можно просто вынести в .default шаблон сайта. В решениях для Bitrix Marketplace их стоит вынести в отдельный каталог и копировать на шаге установки шаблона дизайна (тем самым опять же уменьшая дублирование).
  4. Для самостоятельных решений выносите мастер создания сайта из модуля в каталог /bitrix/wizards/. Это позволит избежать либо дублирования, либо дополнительного копирования мастера при установке решения.

4
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии