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