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