【问题标题】:PHP accelerator vs Just in Time CompilationPHP 加速器与即时编译
【发布时间】:2011-05-09 23:51:10
【问题描述】:
来自维基百科:
大多数 PHP 加速器通过缓存 PHP 的编译字节码来工作
脚本以避免解析和编译源代码的开销
每个请求(其中一些或全部可能永远不会被执行)。到
进一步提高性能,缓存代码存储在共享
内存并直接从那里执行,最大限度地减少慢
在运行时进行磁盘读取和内存复制。
及时编译:
JIT 编译器代表一种混合方法,会发生转换
不断地,与口译员一样,但会缓存已翻译的内容
代码以尽量减少性能下降。
因此,在 PHP 上使用诸如 APC 之类的 PHP 加速器对“即时”编译 PHP 的性能具有同等的影响(假设可以这样做)......事实上它们实际上是同一件事吗?
【问题讨论】:
标签:
php
compiler-construction
accelerator
【解决方案1】:
因此,在 PHP 上使用诸如 APC 之类的 PHP 加速器对“即时”编译 PHP 的性能具有同等的影响(假设可以这样做)......事实上它们实际上是同一件事吗?
相同的概念,不同的执行。
大多数圈子里提到JIT,是指将虚拟机字节码编译成native字节码。例如,Facebook 的HHVM 是一个使用JIT engine 的PHP 实现。
但是,PHP 的本机虚拟机不对本机字节码执行 JIT。事实上,它根本不做传统意义上的JIT。虽然整个文件都按需编译为 PHP 字节码,但这实际上并不是 JIT。
请注意“PHP 加速器”一词。回到 PHP4 时代,PHP 解析器创建的字节码可以进行一些优化以获得更好的性能。从早期的 PHP5 开始就不需要了。 APC、Zend“优化器”和其他“加速器”产品为提高 PHP 性能所做的唯一是缓存字节码。不应再使用“加速器”一词来消除歧义。
如果您使用的是标准 PHP,那么您确实想要一个字节码缓存,只是避开那些声称他们尝试进行 PHP 字节码优化的产品。