PHP通常在执行时通过Zend引擎编译成opcode。
为了避免每次编译,可以使用像APC这样的opcode缓存将opcode保存在共享内存中并重复使用它。
好的,现在似乎还没有像Java那样仅编译PHP为opcode并使用的解决方案。
但是为什么呢?我想知道这个问题的答案,因为这是一个非常显然的想法,所以我猜肯定有原因。
编辑:
核心问题是:
PHP编译不会使opcode缓存变得无用吗?
唯一的“理由”可能就是你不能在现场系统上直接修复代码,这是非常不好的做法。
PHP通常在执行时通过Zend引擎编译成opcode。
为了避免每次编译,可以使用像APC这样的opcode缓存将opcode保存在共享内存中并重复使用它。
好的,现在似乎还没有像Java那样仅编译PHP为opcode并使用的解决方案。
但是为什么呢?我想知道这个问题的答案,因为这是一个非常显然的想法,所以我猜肯定有原因。
编辑:
核心问题是:
PHP编译不会使opcode缓存变得无用吗?
唯一的“理由”可能就是你不能在现场系统上直接修复代码,这是非常不好的做法。
你提出了一个反对意见。
另一个非常重要的原因是,如果你把编译和运行时分开,无论是在每个发生的时间上还是在它们运行的硬件上,你很快就会遇到复杂的依赖问题——当你尝试在PHP 5.3运行时上运行由PHP 5.1生成的操作码时会发生什么?
这也使得代码调试更加困难——因为调试器必须将操作码映射回源代码。
但你似乎没有问过,更不用说回答一个非常重要的问题,那就是预先生成操作码的好处是什么?
在运行时之前编译操作码是否比缓存操作码有显著的好处呢?两者之间的差异是无法衡量的微小的。
当然,HipHop 的存在理由是,经过本地编译的 PHP 代码比带有操作码缓存的 PHP 运行更快,但这是完全不同的事情。
你认为只在服务器上有操作码是否提高了安全性(通过混淆)?