【问题标题】:Is code written in Hack faster than code written in PHP on HHVM?在 HHVM 上用 Hack 编写的代码是否比用 PHP 编写的代码更快?
【发布时间】:2014-09-29 10:34:55
【问题描述】:

从 PHP 过渡到 HHVM 上的 Hack,我们能否期待速度提升?

我在考虑强类型参数/返回类型,尤其是标量,是否允许 HHVM 在将代码编译为本机代码方面做得更好,或者与使用经典 PHP 和它的混合类型?

【问题讨论】:

  • @Mark 我当然可以做一些小基准测试,但我不知道它们是否具有代表性。我对这背后的理论更感兴趣,因为有人深入了解 HHVM JIT 编译器的核心工作原理。
  • 好吧,如果您谈论的是切换平台和切换语言....如果您要比较两个重大变化,那么很难从其中一个或另一个中得到诚实的衡量......你' d 几乎肯定会看到从 Apache/mod_php 到 hhvm/php 的速度变化
  • 判断一个方法是否更快的最好方法是测试它的速度。每次发生的时间,看看哪个更快。几乎所有我想尝试的想法我都会这样做。
  • 好吧,你们俩说的都是真的,但同样,我不仅喜欢基准测试,还喜欢一些理论。 @Mark,我相信从 mod_php 到 HHVM 的速度提升是巨大的。我感兴趣的是:如果我切换到 HHVM,速度是否会成为在 Hack 语言和 PHP 语言之间进行选择的决定因素?
  • 我在下面给出了一个完整的答案,我认为解决了“理论上加速是什么样的”和“速度将是在 Hack 和 PHP 之间进行选择的决定因素”。但与任何性能问题一样,即使考虑到我在下面所说的内容,为对您很重要的事情运行自己的基准测试的建议也是很好的建议。

标签: php hhvm hacklang


【解决方案1】:

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 会加快速度吗?不。添加更多类型注释会加快速度吗?可能会有点,将来可能会更多,但这并不是重点。

【讨论】:

  • 一位内部人士的出色总结,因此肯定对好处有很好的洞察力和建议
  • 2015 年 2 月更新:上述答案仍然基本正确。唯一需要注意的变化是,从 HHVM 3.5 左右开始,我们已经开始更好地利用返回类型来优化性能。
  • 既然 PHP 7 有标量类型提示和返回类型,我猜 HHVM 可以在运行 PHP 代码时执行类似的优化?
  • 我不确定 HHVM 对 PHP7 类型的优化程度——它们比较棘手,因为根据 调用者 的配置,它们可以强制执行而不是错误。这比在 Hack 中的检查要复杂一些。
  • PHP 7 比 PHP 5 快得多,几乎和 HHVM 一样快。它支持标量类型提示,因此无需使用 Hack。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
相关资源
最近更新 更多