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

Ben*_*min 27 php hhvm hacklang

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

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

Jos*_*man 60

几个月前我在Reddit上回答了这个问题.我在下面复制了我的答案,因为从那以后世界状况没有太大变化.但请记住,HHVM仍在不断发展,实际上非常快,所以这可能会在一两个月内轻易过时.

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

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

但这只是HHVM上的普通PHP,而不是HHVM上的Hack.从将代码转换为Hack后,您获得了多少加速?这取决于你如何进行转换,但答案是,至少现在,"不是很多".如果您只是坚持<?hh每个文件的顶部,而不是<?php修复运行类型检查程序时出现的任何不兼容性,那么您的代码很可能会像以前一样执行.Hack和PHP代码具有相同的运行时表示,因此您没有真正改变太多.

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

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

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

  • 2015年2月更新:上述答案仍然是正确的.值得注意的唯一变化是,我们已经开始更好地利用返回类型进行性能优化,如HHVM 3.5左右. (4认同)
  • PHP 7 比 PHP 5 快得多,几乎与 HHVM 一样快。而且它支持标量类型提示,因此无需使用 Hack。 (2认同)