繁体   English   中英

用HHVM编写的代码比使用PHP编写的代码快吗?

[英]Is code written in Hack faster than code written in PHP on HHVM?

我们可以期望通过从HHVM上的PHP过渡到Hack来获得速度提升吗?

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

几个月前我在Reddit上回答了这个问题 我在下面复制了我的答案,因为从那以后世界状况没有太大变化。 但请记住,HHVM仍在不断发展,实际上非常快,所以这可能会在一两个月内轻易过时。

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

正如其他人所说的那样,将PHP代码从PHP5迁移到HHVM可能会带来显着的加速。 重要程度取决于很多因素。 如果你已经被IO限制,你可能根本看不到多少; 如果你更接近CPU限制,已经报告了高达5x之类的速度,尽管你可能会在中间某处获得某些东西。 您应该在自己的代码上尝试使用真正的工作负载--HHVM有很多因素,特别是更大的启动时间,这使得它在微基准测试中表现不佳,但在实际工作负载上它应该优于PHP5。 为了获得最大的好处,重构代码以使事物脱离顶层并进入函数/类将有助于实现(我们不能在顶层编写JIT代码),以及设置repo权威模式

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM