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

Работает ли кеш-код opcode PHP с __autoload?

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

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

4b9b3361

Ответ 1

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

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

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

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


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

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

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

В результате автозагрузка не должна создавать проблем с кешированием кода.

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

Ответ 2

Ключи 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 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, очевидно, быстрее.