Сколько PHP включает в себя слишком много? - PullRequest
15 голосов
/ 10 марта 2010

Каждая страница на моем сайте отображается с использованием PHP.

Каждый файл PHP использует около 10 включений. Таким образом, для каждой отображаемой страницы сервер должен извлечь 10 файлов в дополнение к остальным функциям (MySQL и т. Д.).

Должен ли я объединить их в один включаемый файл? Будет ли это иметь ЛЮБОЕ значение для реальной скорости? Это не тривиальная задача, так как в ней будут разбираться спагетти с переменной областью действия.

Ответы [ 4 ]

24 голосов
/ 10 марта 2010

Включаемые файлы обрабатываются на сервере, поэтому они не «выбираются» браузером. Разница в производительности использования включает копирование и вставку кода или консолидацию файлов настолько незначительна (и я предполагаю, что речь идет о диапазоне от 10 мс до 100 мс, в абсолютном большинстве), что это вообще стоит.

Не стесняйтесь набрать include и require, если хотите. Чистый код существенно важнее, чем сокращение времени загрузки страницы менее чем за 100 мс. Если вы создаете что-то, где время имеет решающее значение, вам все равно не следует использовать PHP.

3 голосов
/ 10 марта 2010

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

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

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


Ссылки

0 голосов
/ 10 марта 2010

include\ and требует` только открытого файла на стороне сервера, но это может занять много времени в зависимости от аппаратного / файловой системы и т. Д.

В любом случае, если можете, используйте autoloader. Только необходимые файлы будут загружены таким образом.

Тогда, если вы считаете, что включенные файлы являются источником замедления (и я думаю, что есть много других моментов, на которые нужно обратить внимание в улучшении ранее), вы можете попытаться автоматически объединить файлы. У вас по-прежнему есть один файл на класс при разработке, но вы можете создать файл, содержащий определение каждого класса, чтобы иметь только один include (что-то вроде cat <all your included file>.php > to_include.php).

0 голосов
/ 10 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...