BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Facebook已将HHVM/JIT用于其开发和产品中

| 作者 Abel Avram 关注 7 他的粉丝 ,译者 臧秀涛 关注 2 他的粉丝 发布于 2012年12月4日. 估计阅读时间: 4 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

Facebook宣布,他们已经在产品中使用了HHVM这款支持JIT编译的HipHop虚拟机,这种方案统一了开发和部署两种环境,同时为开发者带来了显著的性能收益。

因为页面加载的性能问题,Facebook决定实现一套从PHP向C++转换的工具链, 该工具链即HipHop PHP,已于2010年开源,其中的编译器称为HPHPc。该工具将PHP转化为一种抽象语法树(Abstract Syntax Tree,AST),之后AST被转化为C++代码,最后静态编译为x64二进制代码。虽然这种方案能够加速Web页面,但是也给开发带来了一个问题,由于Facebook 的所有开发者都有网站代码的一份完整拷贝,在开发时他们必须等待整个代码库编译完成。Facebook的工程总监David Mortensen在QCon SF 2012上讨论HPHPc时提到,因为网站以很高的速率持续增长,编译阶段延长到了十分钟左右,大量开发人员都要等待。

为了解决该问题,Facebook做出以下决定:在产品代码中仍然使用编译器,同时为开发代码创建一个解释器(HPHPi),希望此举能消除编译停滞时间。这又使产品环境与开发环境出现了差异,其中存在一个问题,出于性能考虑两种环境使用了不同的AST,而且据Facebook的工程师Drew Paroski介绍,HPHPi甚至比引入HipHop之前的原始Zend引擎还要慢

面对这个新问题,Facebook 的一个工程师小团队设计了一款名为HHVM(HipHop VM)的虚拟机,而且自2011年起就将其应用于开发中了。在对JIT进行了几个月的调校之后,HHVM被引入了产品中,用于执行已部署的代码。Paroski宣布,HHVM的性能已经赶上了HPHPc,甚至在页面加载时间上的表现还要好一点。这意味着,在Facebook开发和部署可以使用统一的环境了;而且随着JIT引擎的进一步调校,性能还有改进空间。Paroski指出:

利用HHVM,从运行时和基本库,到生成的裸机机器代码,我们能够为PHP开发栈选择范围更广的优化策略了。在未来几年,我们计划利用这种灵活性让Facebook的Web层更为高效。

能够持续改进HipHop的开发体验,我们也非常兴奋。改进主要体现在两个方面,一个是安装和开发流程更容易且更灵活了,另一个是支持的流行PHP 应用和框架越来越多了。

目前HipHop是一种混合环境,其中部分代码解释执行,但大部分代码以JIT方式编译执行。据Paroski介绍:

HHVM这样运行PHP程序,先将PHP源代码转换为HipHop字节码(HHBC),然后使用字节码解释器和x64 JIT编译器来执行字节码。这里的解释器和编译器可以无缝地进行互操作。HHVM会尽可能使用JIT,万不得已时才将解释器作为执行引擎。

Facebook现在已将HHVM开源,同时弃用了HPHPi并移除了对它的构建支持。到2013年中期,他们将不再支持 HPHPc。HHVM提供了支持Ubuntu 12.04的预构建包以及支持CentOS 6.3的构建说明,而对FreeBSD 9和Mac OS的支持将于明年HPHPc退役之后再提供。

查看英文原文Facebook Now Uses HHVM/JIT both in Development and Production

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT