Работает ли кэш кода операции PHP с __autoload?

Извините, если это просто, я пытаюсь узнать как можно больше об ОО в PHP, и я постепенно учусь его использовать (очень ограниченно).

Итак, я хочу знать, влияет ли __autoload() на кэш кода операции PHP?

2 ответа

Решение

(Отказ от ответственности: я знаю только APC)

Что делает кэш кода операции:

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

Важным моментом здесь является точка входа: полный путь к файлу.


Что обычно делает автозагрузка:

  • получить название класса
  • преобразовать его в имя файла
  • включить / потребовать этот файл

Таким образом, информация, которая имеет отношение к кэшу кода операции (полный путь к файлу и тот факт, что он включен / требуется), все еще здесь.

Следовательно, автозагрузка не должна доставлять проблем с кэшированием кода операции.

(И при использовании APC, насколько я могу судить, это не так)

Кэши Opcode работают (или, по крайней мере, должны работать) с автозагрузкой, но вы потенциально можете снизить производительность.

Из Помните: будьте любезны с байтами кода:

<arnaud_> does autoload have a performance impact when using apc ?
<Rasmus_> it is slow both with and without apc
<Rasmus_> but yes, moreso with apc because anything that is autoloaded is pushed down into the executor
<Rasmus_> so nothing can be cached
<Rasmus_> the script itself is cached of course, but no functions or classes
<Rasmus_> Well, there is no way around that
<Rasmus_> autoload is runtime dependent
<Rasmus_> we have no idea if any autoloaded class should be loaded until the script is executed
<Rasmus_> top-level clean deps would speed things up a lot
<Rasmus_> it's not just autoload
<Rasmus_> it is any sort of class or function declaration that depends on some runtime context
<Rasmus_> if(cond) function foo...
<Rasmus_> if(cond) include file
<Rasmus_> where file has functions and classes 
<Rasmus_> or heaven forbid: function foo() { class bar { } }

и это письмо от Рамуса:

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

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