2012-05-02 80 views
9

PHP是一种通用的服务器端脚本语言。众所周知,当页面加载并显示网页时,php代码会被解释。最近我听说过PHP的即时编译器(HipHop虚拟机)。想知道它在执行过程中会产生什么样的差异,并且更好地使用jit而不是解释器?是任何PHP引擎有jit?PHP - 即时编译器Vs解释器

编辑: 是这样的PHP执行流程:PHP代码 - >分析 - >标记 - >字节码/操作码 - > PHP引擎解释 - >机器代码 - >执行

Corect我,如果我我错了。字节码通常在虚拟机中执行。操作码(接近机器语言)可以直接由机器执行。这是否意味着PHP引擎是虚拟机还是仅仅是虚拟机的一些实现?

在此先感谢。

+1

什么是良好的Facebook的不好肯定对其他一些项目。高可扩展性通常没有银弹般的解决方案(假设你有高负载应用,否则不要浪费你的时间 - 你仍然有很多地方需要优化,直到使用嘻哈将是值得的) – zerkms

+2

你应该从启用[APC](http://php.net/manual/book.apc.php)。它将保存PHP在每次请求时运行解释步骤。 – adrien

+0

字节码缓存可以节省您编译为字节码的时间,而不是解释字节码(发生在有或没有APC的情况下)。 – delnan

回答

6

HipHop不是JIT编译器 - 它是一个将PHP更改为C++的代码转换器,然后可以使用传统的离线编译器对其进行编译。

因此,eval和create_function将不起作用,也不会使用标记器功能。我没有深入研究过这个问题,但我期望条件/运行时评估的包含操作也可能会导致问题。

除非使代码更快,否则不会有太大的意义。

使用PHP操作码缓存的OTOH在不影响功能的情况下提供了巨大的性能提升(与原生代码不尽相同)。

(给出的架构关闭PHP JIT编译器并没有真正做了很大的意义)

+0

感谢您的信息。我理解使用APC扩展,zend优化器[PHP加速器](http://en.wikipedia.org/wiki/List_of_PHP_accelerators)等。给我们提升性能。你能解释一下为什么JIT编译器对PHP的体系结构没有意义,或者JIT会在什么样的体系结构中有用? –

+5

Facebook Hip Hop虚拟机是一个JIT编译器。 Facebook Hiphop – Tosh

+0

[“HHVM使用即时(JIT)编译方法来实现卓越的性能,同时保持PHP开发人员习以为常的灵活性。”](https://github.com/facebook/ HHVM) – msanford