php自从4.0以后成为了编译语言. 在此之前php都是被直接解释运行的. 2000年, php4.0发布的时候,引入了zend engine. zend引擎把php代码的执行切分成两个阶段: 1. 解析php代码并生成二进制中间码zend opcodes, zend opcodes类似于java bytecodes 2. zend engine
php自从4.0以后成为了编译语言. 在此之前php都是被直接解释运行的.
2000年, php4.0发布的时候,引入了zend engine.
zend引擎把php代码的执行切分成两个阶段:
1. 解析php代码并生成二进制中间码zend opcodes, zend opcodes类似于java bytecodes
2. zend engine解释运行opcodes
这些opcodes被设计成可能被加载在内存中,这是通过opcode caching extensions实现的。
关于这些缓存扩展可以查阅:
http://en.wikipedia.org/wiki/list_of_php_accelerators
缓存扩展仅仅是为了避免php代码被重复编译。如果缓存中有相同可用的代码,则直接执行。
这本身并非加速了php代码本身的执行速度,只是简化了步骤来提高性能。
你需要通过optimizer extensions来优化php代码,获得代码执行速度的提高。
这里还要提一下encoder extensions,这些扩展是为了在出售php资产时,用以保护php源码的。
这些扩展允许提取opcodes并保存为平台无关的文件,其内容被通过特定格式加密。
下图表明在使用zend engine部署的时候,php执行过程:
上述提到的php编译实际上都是编译成中间码,
实际上php的编译还有一种形式,即编译成本地机器码或者web服务器的扩展。
http://www.phpclasses.org/blog/post/117-php-compiler-performance.html
