32

我们可以期望通过在 HHVM 上从 PHP 过渡到 Hack 来提高速度吗?

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

4

1 回答 1

80

几个月前我在 Reddit 上回答了这个问题。我在下面复制了我的答案,因为从那时起世界状况没有太大变化。但请记住,HHVM 仍在发展,实际上非常快,因此它很容易在一两个月后就过时了。

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

正如其他人所说,将 PHP 代码从 PHP5 迁移到 HHVM 可能会显着提高速度。重要程度取决于很多因素。如果您已经受 IO 限制,您可能根本看不到太多;如果您更接近 CPU 限制,则已经报告了高达 5 倍的加速,尽管您可能会得到介于两者之间的东西。你应该去在你自己的代码上尝试一下,用一个真实的工作负载——HHVM 有很多因素,特别是更长的启动时间,这使得它在微基准上表现不佳,但在实际工作负载上它应该优于 PHP5。为了获得最大的利益,重构代码以使事情脱离顶层并进入函数/类将有很大帮助(我们不能在顶层 JIT 代码),设置repo 权威模式也是如此。

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

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

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

那么从 PHP5 迁移到 HHVM 是否会加快您的代码速度?极有可能。快速转换到 Hack 会加快速度吗?不。添加更多类型注释会加快速度吗?也许一点,也许未来更多,但这不是重点。

于 2014-09-29T12:40:33.033 回答