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

Вы можете рассмотреть стороннюю службу электронной почты, которая обрабатывает проблемы с доставкой:

  • Точная цель
  • Вертикальный ответ
  • Постоянный контакт
  • Монитор кампании
  • Эмма
  • Обратный путь
  • IntelliContact
  • SilverPop
13
задан JasonDavis 8 September 2009 в 21:47
поделиться

2 ответа

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

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

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

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


Обычно автозагрузка делает следующее:

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

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

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

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

16
ответ дан 1 December 2019 в 18:06
поделиться

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

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

<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, очевидно, намного быстрее.

27
ответ дан 1 December 2019 в 18:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: