无论是从命令行还是从web服务器请求PHP脚本,PHP必须执行5个步骤,如下图所示,Zend引擎必须从文件系统读取文件、扫描其词典和表达式、解析文件、创建要执行的计算机代码(成为Opcode),处理Opcode,然后做出响应。
PHP的生命周期非常短暂,但是每次对脚本发出请求时,它必须执行上图中列出的所有步骤,每次在针对特定PHP脚本的请求到达时,即使该PHP脚本内容没有变化,Zend引擎也必须重新创建该文件的Opcode。对于PHP的初次请求,这是必要的,但后续请求无需如此操作。如果实现Opcode缓存,我们就可以省略词典扫描,解析及创建Opcode这三个步骤以缩短PHP的生命周期,从而提高程序的性能。
下图是优化后的最终PHP的生命周期
在用户初次请求中,会采用上面第一个图的路径,但在执行词典扫描前还要执行其他两个步骤。Zend引擎执行的额外步骤是在缓存内部检查已生成的Opcode,,如果之前没有生成Opcode,则引擎继续执行词典扫描,直至到达创建Opcode这一步。生成Opcode后,将其放入Opcode缓存中,然后继续。执行这个步骤,则之后对这个PHP脚本的任何请求都可以从共享内存中读取Opcode,从而不必自行创建Opcode。
用来缓存PHP的Opcode的缓存工具有几种,常用的如Alternative PHP Cache(APC), XCache,eAccelerator(eA)等