PHP include (): размер файла и производительность - PullRequest
36 голосов
/ 19 февраля 2010

Неопытный вопрос PHP:

У меня есть файл сценария PHP, который мне нужно многократно включать на разные страницы во многих местах.

У меня есть возможностьразбить включенный файл на несколько меньших файлов и включать их по мере необходимости ... ИЛИ ... Я мог бы просто сохранить все это вместе в одном файле PHP.

Мне интересно, есть ликакое влияние на производительность использования файла «больше» или «меньше» для include () в этом контексте?Например, есть ли разница в производительности между файлом размером 200 КБ и файлом размером 20 КБ?

Спасибо.

Ответы [ 3 ]

43 голосов
/ 19 февраля 2010

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

При загрузке файла .php есть две вещи, которые требуют времени:

  • Исходный код PHP "скомпилированные операционные коды "to" - это вполне эквивалентно байт-коду JAVA
    • Это делается каждый раз, когда PHP-файл включен, по умолчанию
    • Но, используя некоторый код операциикэш, такой как APC , эти коды операций могут храниться в памяти, и эти вещи компиляции больше не выполняются каждый раз - и это здорово: это будет означать меньшее использование процессора, поскольку компиляция больше не будет выполняться (это будет происходить только время от времени) .
  • Операционные коды выполняются
    • В зависимости от того, что содержит сценарий, это может занятьнекоторое время или нет:
    • Если файл содержит только функции или классыses определения, это не займет много времени: ничего не будет выполнено.
    • Если файл содержит инструкции, это займет больше времени ^^


Как примечание: в общей ситуации вы получите гораздо больше времени / ресурсов / ресурсов на оптимизацию ваших запросов SQL или добавление некоторого механизма кэширования, чем на размышления о подобных вещах.

15 голосов
/ 08 мая 2010

Будьте осторожны с include_once() (а также require_once()), запуск обходится дороже, чем include(). Каждый раз, когда include_once() запускается, PHP выполняет поиск по внутреннему индексу уже включенных файлов, прежде чем решить, загружать файл или нет. Чем больше включается в индекс, тем медленнее этот поиск. Также при использовании include() или include_once() старайтесь использовать абсолютные пути, где это возможно, поскольку это намного быстрее, чем относительные пути, потому что вы не заставляете PHP определять абсолютный путь для вас. Как сказал ggiroux, некоторая форма кэширования, такая как APC, будет приносить огромные плоды и беспокоиться о том, сколько включенных вызовов у вас не имеет значения (в основном) (если у вас нет плохо написанного кода).

EDIT -

Беспокойство по поводу вышеуказанных вызовов становится проблемой только после того, как вы начнете иметь несколько тысяч requires или includes в вашей кодовой базе.

1 голос
/ 19 февраля 2010

Конечно, есть влияние, поэтому обязательно используйте include_once () вместо include (). Вы могли бы рассмотреть возможность использования APC, который имеет кеш включения.

...