Зачем нужна и как работает компиляция Magento

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

26.08.2015 02:17

При компиляции Magento объединяет часть наиболее часто используемых классов PHP в несколько новых файлов, а также копирует все необъединённые классы в одну общую папку includes/src (преобразовывая при этом их имена, чтобы не было конфликтов).
Таким образом значительно сокращается количество обращений интерпретатора PHP к файловой системе при обработке запроса от веб-сервера.

В дистрибутиве самой свежей на сегодня версии Magento CE 1.9.2.1 9346 файлов с расширением *.php.
В Российской сборке Magento самой свежей на сегодня версии 2.46.0 2490 файлов с расширением *.php (учитывая, что Российская сборка Magento - дополнение к Magento CE, совокупное количество файлов с расширением *.php в магазине на Российской сборке Magento - 11 836).

После объединения в папке includes/src будет 8 объединённых файлов:
  • __adminhtml.php
  • __checkout.php
  • __default.php
  • __df_checkout.php
  • __catalog.php
  • __customer.php
  • __sales.php
  • __cms.php


Папка includes/src будет содержать также множество других файлов, потому что компилятор копирует все классы системы в эту папку.
Это тоже сокращает количество обращений интерпретатора PHP к файловой системе за счёт сокращения количества обращений к разным папкам.

Компиляция требует ресурсом значительно больше, нежели обычное отображение страницы магазина.
На стандартном сервере с SSD (EX40-SSD) компиляция занимает несколько секунд, без SSD может занимать в несколько раз больше времени.
На очень слабом сервере компиляция может превысить ограничения PHP max_execution_time и memory_limit. Если ресурсов не хватит из-за этих ограничений - то снимите или измените их.

Обратите внимание, что при прерванной компиляции магазин перестанет работать, и переделать или отключить компиляцию через веб-интерфейс Вы не сможете. Но это нестрашно: компиляцию можно и отключить вручную, и выполнить с командной строки.

Также обратите внимание, что у модуля PHP для кэширования программного кода (теперь стандартом стал OPCache, раньше часто использовали APC) может стоять ограничение на размер кэшируемых файлов.
Оно более чем разумно для обычных программных систем, но вот в частном случае Magento оно обычно не годится, потому что компилятор ведь объединяет множество файлов в единый файл.
Выше я перечислил скомпилированные файлы в порядке уменьшения их размера, самый крупный - __adminhtml.php - занимет ~ 8.7 мегабайтов.
Лучше либо отменить ограничение системы кэширования программного кода, либо повысить его.

Опция называется opcache.max_file_size для OPCache. По умолчанию она отключена, но могла быть включена системным администратором.

Для APC опция называется аналогично: apc.max_file_size, вот она-то по умочланию включена и равна 1 мегабайту, для Magento при включенной это никуда не годится - все скомпилированные файлы превышают этот размер.

Поделиться темой: