Уменьшить количество включаемых файлов - PullRequest
4 голосов
/ 15 августа 2010

Мое приложение на основе Zend Framework и Doctrine включает в себя> 300 файлов на каждый запрос. В основном это одни и те же файлы.

Это довольно большие накладные расходы. Частично разрешается Zend_Cache (и Memcache), но не все страницы могут быть кэшированы.

  • Как уменьшить это число? Как ускорить?

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

Я планирую собрать и другие библиотеки (я уже удалил все require_once).

  • Есть ли инструменты для этой задачи? Может быть, некоторые драйверы кеша делают это автоматически? Как их настроить?

Ответы [ 2 ]

2 голосов
/ 15 августа 2010

Издержки включений php-файлов обычно можно компенсировать с помощью кэша кода операции, такого как APC , расширение доступно через pecl.Кэши Opcode обычно работают путем кэширования скомпилированного байт-кода, так что накладные расходы на чтение и синтаксический анализ источника возникают только при первом запросе.Это значительно отменит необходимость компиляции исходного кода в ваших php-файлах.

1 голос
/ 16 августа 2010

Лучший вариант - использовать APC или Zend_Accelerator. Но все же вы можете сделать эти сценарии «компиляции», которые объединяют классы в один файл. Это снижает необходимый ввод-вывод до минимума. К сожалению, вам также нужно переписать процесс автозагрузки, чтобы он просматривал соответствующий файл. Обычно можно объединить общие классы (Zend_Form + Elements + Decorators, часто используемые валидаторы, Request + Response + Router + Controller, Zend_Db + адаптеры + Zend_Db_Select и т. Д.). Преимущественно классы, всегда используемые в каждом запросе, могут быть легко сжаты и включены вручную в один файл. Лучший способ - добавить отладочный вызов, который сохранит все включенные файлы (http://www.php.net/get_included_files) в БД, а затем:

SELECT * FROM files GROUP BY filename WHERE COUNT(filename) = $numOfRequests

Все файлы в результате могут быть безопасно объединены в один файл и включены до начальной загрузки:)

...