php - 在 HHVM 上用 Hack 编写的代码是否比用 PHP 编写的代码快?

标签 php hhvm hacklang

从 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/

相关文章:

php - HHVM 和/或 PHP 执行引擎到底是什么?

ubuntu - HHVM 已安装,但根据 error.log,环境中缺少类型检查器

PHP 如果逻辑被跳过?

php - 如何在 HTML 的 QueryString 中插入表单控件值?

php - 使用 PHP、REST、Flex 和 Amazon S3 进行 PUT/复制

php - 拉维尔 5 : Is there a non-case sensitive way to sort a collection by an attribute?

php - 将 pdf 的第一页转换为 jpg 时收到无效文件名错误

hhvm - 调试 hhvm 段错误

HHVM+黑客语言 : errors/warnings output into browser

php - HHVM Hack 源代码到纯 PHP