Должен ли я платить штраф за производительность, поскольку PHP перекомпилирует мой исходный код для каждого запроса?

Я знаю, что PHP в основном интерпретируемый язык. Интерпретатор PHP (php.exe в Windows и php файл в Linux) выполняет интерпретацию каждый раз, когда выполняется мой скрипт, или только когда я меняю источник? Иными словами, интерпретатор PHP кэширует интерпретируемые скрипты или нет?

3 ответа

Решение

По сути, это то, что происходит каждый раз, когда приходит запрос:

  • PHP читает файл
  • PHP компилирует файл на язык, который он может обрабатывать, так называемый код операции
  • PHP запускает код операции

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

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

Да, у вас есть снижение производительности, поскольку PHP выполняет интерпретацию каждый раз. Однако, если у вас установлен и настроен APC (Alternative PHP Cache: http://php.net/apc), он сохранит весь байт-код в памяти и перестроит его, когда произойдут некоторые изменения.

Да.

Будучи переведенным языком, вы платите штраф за производительность. Однако есть некоторые исследования в направлении компиляции и использования.

Посмотрите на PHP Accelerator.

Большинство ускорителей PHP работают за счет кэширования скомпилированного байт-кода сценариев PHP, чтобы избежать накладных расходов на синтаксический анализ и компиляцию исходного кода при каждом запросе (некоторые или даже большинство из которых могут никогда не выполняться). Для дальнейшего повышения производительности кэшированный код хранится в общей памяти и напрямую оттуда выполняется, что сводит к минимуму количество медленных операций чтения с диска и копирования памяти во время выполнения.

Другие вопросы по тегам