用 Hack 编写的代码是否比在 HHVM 上用 PHP 编写的代码更快?
我们可以通过在HHVM上从PHP过渡到Hack来获得速度提升吗?
我正在考虑强类型参数/返回类型,特别是标量,这是否允许HHVM更好地将代码编译为本机代码,或者与使用经典PHP及其混合类型相比,速度提升是否微不足道?
我们可以通过在HHVM上从PHP过渡到Hack来获得速度提升吗?
我正在考虑强类型参数/返回类型,特别是标量,这是否允许HHVM更好地将代码编译为本机代码,或者与使用经典PHP及其混合类型相比,速度提升是否微不足道?
几个月前,我在Reddit上回答了这个问题。我在下面复制了我的答案,因为从那时起,世界状况没有太大变化。但请记住,HHVM仍在发展,实际上非常快,因此在一两个月后,这很容易过时。
我在Facebook的Hack团队工作。这个问题的答案有些微妙。
正如其他人所说,将PHP代码从PHP5移动到HHVM可能会导致显着的加速。重要性取决于大量因素。如果您已经绑定了IO,则可能根本看不到太多;如果您更接近CPU限制,则已经报告了高达5倍的加速,尽管您可能会在中间的某个地方得到一些东西。你应该去你自己的代码上尝试一下,有一个真正的工作负载 - HHVM有很多因素,特别是更长的启动时间,这使得它在微基准上表现不佳,但在实际工作负载上它应该优于PHP5。为了获得最大的好处,重构你的代码以将事情从toplevel中取出并放入函数/类中将有所帮助(我们不能在toplevel上JIT代码),设置repo权威模式也是如此。
但这只是HHVM上的普通PHP,而不是HHVM上的Hack。然后将代码转换为Hack可以获得什么加速?这取决于你如何进行转换,但答案是,至少现在,“不是很多”。如果您只是坚持在每个文件的顶部,而不是 ,并修复运行类型检查器时出现的任何不兼容性,那么您的代码很可能会像以前一样执行。Hack 和 PHP 代码具有相同的运行时表示形式,因此您并没有真正改变太多。<?hh
<?php
但是,如果您这样做,那么您就没有充分利用Hack!如果您进入并开始添加类型注释,则可以为 HHVM 在运行时使用构建越来越多的信息。这个过程可以加快你的代码 - HHVM可以在很多情况下生成类型专用(即更快)的代码,而以前它可能无法推断出类型。也不要指望这里会有巨大的加速 - 这在很大程度上是理论上的,而且我们可以在很多地方更好地利用类型信息来生成更快的代码。(例如,我们现在在运行时对返回类型不做太多事情。但这是可能有帮助的部分,并且随着HHVM变得越来越智能,可能会更有帮助。
但是,当然,请记住,执行速度不是Hack的重点 - 它是关于开发人员效率的。任何性能提升可能都不值得从HHVM上的PHP到HHVM上的Hack。不过,开发人员生产力的提高可能是。
那么,从 PHP5 迁移到 HHVM 会加快代码的速度吗?大半。快速转换为Hack会加快速度吗?不。添加更多类型批注是否会加快速度?也许一点点,也许将来会更多,但这不是重点。