Проблема дублирования и ее решение
Дублирование — одна из самых явных проблем, которая может привести к следующим последствиям:
- Увеличение размера дистрибутива.
- Некоторое увеличение времени установки за счет копирования и обработки продублированных файлов.
- Сильное увеличение временных затрат на внесение изменений, так как приходится вносить их во все копии файлов.
- Повышение вероятности ошибки за счет не внесенного изменения в одну из копий.
Хорошим примером проблемы дублирования является решение С 1 февраля 2023 года продажа данного решения прекращена. «Официальный сайт государственной организации», версия от 03.08.2010. Это решение включает себя 8 различных видов сайта, частично отличающихся как своей структурой, так и набором демо-данных. А также четыре шаблона дизайна, которые можно использовать для любого вида сайта.
Отбросим файлы самой редакции платформы Bitrix Framework и оставим для анализа только модуль gossite и мастер установки bitrix:government. Вместе они имеют размер 274 МБ и состоят из 13 867 файлов и 7 940 каталогов. Эти цифры не назовешь маленькими.
Рассмотрим основные случаи дублирования в этом решении:
- В модуле 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 ); - Публичная часть мастера содержит папку
/commonдля общих файлов, а также папки для каждого из типов сайта. По логике установки сервисов первым копируется содержимое папки выбранного вида сайта, а потом поверх него содержимое папки с общими файлами. При беглом осмотре можно заметить, что каталог/video(15,7 МБ) из общих файлов дублируется также в четырех видах сайта, причем видеофайлы идентичны. А содержимое папки/uploadиз общих файлов частично дублируется для сайта прокуратуры. В папке/upload/сайта прокуратуры присутствует каталог/iblock, дублирующий файлы для установки инфоблоков. Также в каталогах разных типов сайтов были другие полностью дублирующиеся файлы и каталоги, которые можно вынести в/common. - В базовом шаблоне дизайна (modern) в цветовых схемах продублировано много шаблонов компонентов из самого шаблона. Часть из них дублируются полностью, для части есть несколько отличающихся файлов. В последствии очень легко не внести изменения в какую-либо из цветовых схем и в итоге запутаться, где находится актуальная версия. Да и объем работы при правке этих шаблонов возрастает в несколько раз (по числу цветовых схем в шаблоне). Поэтому все дублирующиеся части из них лучше удалить.
- В каталоге установки сервисов для каждого типа сайта создан отдельный набор данных для инфоблоков. Выбор, какой именно набор ставить производился в файле описания сервисов .services.php. С одной стороны это удобно, но с другой стороны дублирование информации сильно увеличивается за счет дополнительных файлов инфоблоков. Например, при одинаковых альбомах в фотогалерее, или одинаковых наборах документов.
Решением этой проблемы стало объединение общих инфоблоков в один каталог. При каких-либо отличиях в настройках или содержании инфоблоков для каждого типа сайта сохранялся свой xml файл с добавлением префикса по типу сайта, но все они использовали уже общий набор дополнительных файлов. Выбор что устанавливать стал проводиться в скрипте установки инфоблока.
Над последней версией дистрибутива решения были проведены работы по устранению указанных выше проблем. В конечном итоге после замены двух шаблонов дизайна новыми, дополнения демо-данных и прочих плановых доработок, совокупный размер мастера и модуля уменьшился до 141 МБ, а количество файлов и каталогов уменьшились до 8 889 и 4 588 соответственно.
Другие советы по уменьшению размера дистрибутива
- Не используйте в дистрибутиве большие видео/аудио файлы.
- Исключайте из дистрибутива все кастомизированные шаблоны компонентов, которые в ходе разработки перестали где-либо использоваться
- Выносите общие для всех дизайнов шаблоны компонентов в отдельный каталог. Для самостоятельных решений их можно просто вынести в .default шаблон сайта. В решениях для Bitrix Marketplace их стоит вынести в отдельный каталог и копировать на шаге установки шаблона дизайна (тем самым опять же уменьшая дублирование).
- Для самостоятельных решений выносите мастер создания сайта из модуля в каталог
/bitrix/wizards/. Это позволит избежать либо дублирования, либо дополнительного копирования мастера при установке решения.
Курсы разработаны в компании «1С-Битрикс»
!Прокрутить вверх