Сборщик кода (описание интерфейса)

Упаковка кода (пакет) представляет собой обычный php-файл, включающий исходный код нескольких классов системы. Класс (файл класса) может быть включен только в один пакет. Активизация режима использования пакетов осуществляется в файле system/config/main.php свойством usePackages, при этом директива useMap должна быть подключена (идентификация пакета производится при помощи карты классов).

Разработчик определяет, какие библиотеки и классы системы используются постоянно или в группе, исходя из этого создает упаковки кода, содержащие наборы классов. Сборка исходных кодов производится нажатием кнопки «Compile packages», в этот же момент формируется карта классов.

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

Принцип работы пакетов достаточно прост. При запросе класса, Autoloader в первую очередь ищет его по карте (hash), определяет местоположение в файловой системе и причастность к какому-либо пакету. Если класс включен в состав какого-либо пакета, то подключается весь пакет, иначе подключается отдельный файл. Если класса не оказалось в карте (например, она устарела), Autoloader ищет файл класса в файловой системе по заданным путям.

Такой подход позволяет многократно повысить производительность системы и ограничивает избыток вгруженного кода.

Интерфейс управления пакетами



В левой части отображается список пакетов, содержащий информацию об имени пакета, количестве включенных файлов, индикаторе активности (используется/не используется) и статусе пакета (актуален / устарел).  Если исходный код изменился, а пакет не был пересобран, будет выведено уведомление в виде иконки, в таком случае необходимо пересобрать пакет.

Правая часть интерфейса отображает список файлов в пакете и позволяет менять очередность включения, что очень важно при формировании пакетов. Если очередность выбрана неудачно, при использовании пакета будет выведен fatal error.

Кнопка Compile lang запускает сборку языковых файлов для JavaScript.

Кнопка Compile packages запускает сборку пакетов и карты классов.

Карта классов необходима для определения местоположения файлов классов, уменьшает нагрузку на файловую систему при поиске для автозагрузки. Автозагрузка классов по карте может осуществляться в двух режимах, настраиваемых в основном файле конфигурации system/config/main.php:

  • ‘only_map’=>true - поиск только по карте классов, в этом режиме возможна загрузка только классов указанных в карте, режим немного более производителен, но необходимо поддерживать актуальность карты;
  • ‘only_map’=>false - смешанный режим, в этом случае в первую очередь класс ищется в карте, при отсутствии в карте осуществляется поиск по файловой системе.

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

Определить список файлов, которые стоило бы подключить в пакет, поможет вызов метода Debug::getStats(), который кроме прочей информации отображает информацию о подключенных файлах, отдельно можно посмотреть список файлов подключенных автозагрузчиком.

Метод вызывается в файле  index.php  при включенном режиме разработчика ‘development’=>true и включенной дебаг-панели ‘debug’_panel=>true. По умолчанию этот метод вызван без параметров, панель отображает минимальный набор информации. Более подробную информацию  можно получить, используя параметры при вызове метода:

  1. $showCacheQueries = true  - отобразить информацию об обращениях к кэшу;
  2. $showQueries = true - выводить список запросов к базе данных;
  3. $showAutoloaded = true - вывести список автоматически загруженных классов;
  4. $showInclided = true  - вывести список подключенных файлов.