Jas*_*vis 13 php opcode-cache autoload
对不起,如果这是基本的,我正在尝试尽可能多地学习PHP中的OO,我正在慢慢学习如何使用它(非常有限).
所以我想知道__autoload()是否对PHP操作码缓存有任何影响?
cle*_*tus 27
操作码缓存通过自动加载工作(或至少应该工作),但你可能会受到性能影响.
<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 { } }
Run Code Online (Sandbox Code Playgroud)
而从拉莫斯此邮件:
为了澄清,当然有条件包含的文件被编译和缓存.问题不是包含的文件,而是需要在每个请求上重新定义的结果有条件定义的类和函数.这是否重要取决于具体情况,但毫无疑问它的速度较慢.例如,它归结为NOP与FETCH_CLASS,而NOP显然更快.
Pas*_*TIN 16
(免责声明:我只知道APC)
操作码缓存的作用是:
这里重点是入口点:文件的完整路径.
自动加载通常做的是:
因此,与操作码缓存相关的信息(文件的完整路径以及包含/需要它的事实)仍然存在.
因此,自动加载不会给操作码缓存带来任何麻烦.
(并且,在使用APC时,据我所知,它没有)