用HHVM编写的代码比使用PHP编写的代码快吗?

时间:2014-09-29 10:34:55

标签: php hhvm hacklang

我们可以期望通过从HHVM上的PHP转换到Hack来获得速度提升吗?

我想到强类型参数/返回类型,特别是标量,是否允许HHVM在将代码编译为本机代码方面做得更好,或者与使用经典代码相比,速度增益无关紧要PHP及其混合类型?

1 个答案:

答案 0 :(得分:60)

I answered this on Reddit a few months back。我在下面复制了我的答案,因为从那时起世界的状况并没有太大变化。但请记住,HHVM仍在不断发展,实际上非常快,所以这可能会在一两个月内轻易过时。

我在Facebook的Hack团队工作。这个问题的答案有点微妙。

将PHP代码从PHP5迁移到HHVM可能会带来显着的加速,正如其他人所说的那样。重要程度取决于很多因素。如果你已经受到IO约束,你可能根本看不到多少;如果你更接近CPU限制,已经报告了高达5x之类的速度,尽管你可能会在中间某处获得某些东西。您应该在自己的代码上尝试使用真正的工作负载--HHVM有很多因素,特别是更大的启动时间,这使得它在微基准测试中表现不佳,但在实际工作负载上它应该优于PHP5。为了获得最大的好处,重构代码以使事物脱离顶层并进入函数/类将有助于实现(我们无法在顶层编写JIT代码),以及设置repo authoritative mode

但这只是HHVM上的普通PHP,而不是HHVM上的Hack。从将代码转换为Hack后,您获得了多少加速?这取决于你如何进行转换,但答案是,至少现在,&#34;不是很多&#34;。如果您只是将<?hh放在每个文件的顶部而不是<?php,并修复come up when you run the typechecker的任何不兼容性,那么您的代码很可能会像以前一样执行。 Hack和PHP代码具有相同的运行时表示,因此您实际上没有太多变化。

如果你这样做,那么你并没有充分利用Hack!如果您进入并开始添加类型注释,则可以为HHVM构建越来越多的信息,以便在运行时使用。 这个进程可以加速你的代码--HHVM可以在很多情况下生成类型专用(即更快)的代码,在此之前它可能无法推断出类型。不要期望这里有一个巨大的加速 - 这在很大程度上是理论上现在,并且有很多地方我们可以更好地利用类型信息来生成更快的代码。 (例如,我们现在不会在运行时对返回类型做很多事情。)但这可能会有所帮助,并且随着HHVM变得更聪明可能会有所帮助。

但是,当然,请记住,执行速度并不是Hack的关键 - 它是关于开发人员效率的。任何性能提升都可能不值得从HHVM上的PHP到HHVM上的Hack。但是,开发人员生产力的提高可能是。

从PHP5迁移到HHVM会加速你的代码吗?很可能。快速转换为Hack会加快速度吗?不是。添加更多类型注释会加快速度吗?也许一点点,将来可能会更多,但这不是重点。