2009-09-08 2 views
12

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

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

ответ

15

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

Что кэш опкод сделать:

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

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


Что самозарядные обычно делают это:

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

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

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

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

+0

Это тоже мой опыт. Кэширование кода операции не зависит от использования автозагрузки –

25

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

От Remember: be nice to byte code caches:

<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 { } } 

и this mail from Ramus:

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

+0

Не знаете, почему это не было поддержано. Я только что начал новое сообщение по этой проблеме, так как хотел бы узнать, есть ли альтернативные решения для spl_autoload_register -> http://stackoverflow.com/questions/1941541/php5-frameworks-autoloading-and-opcode-caching –