根据我的理解,如果您使用 APC、eAccelerator 等 PHP 缓存程序,那么操作码将存储在内存中,以便在后续请求时更快地执行。 我的问题是,假设您使用像 phc 甚至 HPHP 这样的编译器(尽管我知道它们在动态构造方面存在问题),为什么编译脚本总是更好/更快? 当您可以编译并跳过该步骤时,为什么要费心存储操作码,因为它们必须由 Zend 引擎重新读取,Zend 引擎使用 C 函数来执行它?
其他编译器实际上只是在二进制文件中嵌入了 php 解释器,因此您实际上并没有真正编译代码。
PHP 不适合编译。操作码缓存非常快并且足以满足 99% 的应用程序的需要。如果您有 Facebook 级别的流量,并且您已经优化了后端数据库,那么编译可能是提高性能的唯一方法。
PHP 对于 std c 库来说并不是一个薄层。
eval()
,可能可以(相对)轻松地直接进行 PHP-> 编译的二进制转换。但由于 PHP 本身可以通过 eval() 动态构建/执行脚本,因此不可能创建完整的二进制文件。任何二进制文件都必须包含整个 PHP,因为编译器不知道您的动态代码可以做什么。您可以从一个 1 或 2k 的小脚本变成一个巨大的数兆字节的二进制文件。