Подтвердить что ты не робот

PHP include(): размер и производительность файла

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

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

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

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

Спасибо.

4b9b3361

Ответ 1

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

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

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


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

Ответ 2

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

ИЗМЕНИТЬ -

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

Ответ 3

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