FinOps有望降低企业50%+的云成本! 了解详情
写点什么

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

  • 2012-12-03
  • 本文字数:1190 字

    阅读完需:约 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

2012-12-03 02:473575
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 126.2 次阅读, 收获喜欢 33 次。

关注

评论

发布
暂无评论
发现更多内容

华为云VPN,经典跟专业版企业应该怎么选?

清欢科技

【kubernetes入门到精通】Kubernetes的健康监测机制以及常见ExitCode问题分析「探索篇」

洛神灬殇

Kubernetes 云原生 服务监控 12月月更

安全可靠,弹性灵活--华为虚拟专用网络VPN

清欢科技

更加灵活、稳定,华为云虚拟专用网络VPN双活网关优势明显!

清欢科技

华为虚拟专用网络VPN,为何备受游戏厂商喜爱?

清欢科技

【web 开发基础】PHP8中对数组操作的新变化(56)

迷彩

List 数组 字符串 PHP基础 PHP8

回顾与展望Zebec举办的“Web3.0 TechHive Summit 2022 大会”

鳄鱼视界

大势所趋_ 华为云企业交换机ESW助力智慧医院转型

路过的憨憨

华为云连接CC服务助企业联通全球

爱科技的水月

无代码的未来

俞凡

无代码

什么是WebSocket

穿过生命散发芬芳

websocket 12月月更

Zebec的“Web3.0 TechHive Summit 2022 大会”圆满落幕,回顾与展望

股市老人

史上最全JVM大全详解!java程序员细节到极致的一次,魔鬼

钟奕礼

程序员 Java 面试 Java、 java 编程

华为云弹性负载均衡服务,如何助企业应付流量压力

爱科技的水月

GitHub屠榜第一的微服务架构深度解析,简直太硬核了

小小怪下士

Java 程序员 微服务

WIKO+鸿蒙生态:海外品牌中国化的新范式

脑极体

如何为企业打造优质应用环境!华为云弹性服务器了解一下

路过的憨憨

如何实现线上线下良好互通?华为云CC支持一点接入多点通达

爱科技的水月

Github星标80k的阿里大牛强推JDK源码笔记,6到飞起

程序知音

Java 源码 jdk 后端技术

【web 开发基础】PHP8 中类的基本操作(57)

迷彩

面向对象 PHP基础 PHP8 实例化

笑对过往、活在当下、期盼未来

阿Q说代码

程序员 flag 年度总结

8年java技术岗面试官总结:2022超强面试大全,抓住2022的小尾巴

钟奕礼

程序员 Java 面试 Java、 java 编程

5分钟搞懂Web3架构

俞凡

架构 web3

回顾与展望Zebec举办的“Web3.0 TechHive Summit 2022 大会”

BlockChain先知

华为云弹性负载均衡ELB,如何保障服务器不瘫痪?

爱科技的水月

公共网络安全,还得看华为云虚拟专用网络VPN

清欢科技

从各行业的实际运用中,窥见华为云虚拟专用网络VPN的强大性能

清欢科技

【web 开发基础】PHP面向对象之访问类中的成员属性和方法(58)

迷彩

面向对象 this指针 PHP基础 PHP8 实例化

回顾与展望Zebec举办的“Web3.0 TechHive Summit 2022 大会”

EOSdreamer111

2022年度盘点|聚焦运维服务,云智慧的高光时刻

云智慧AIOps社区

运维 AIOPS 智能运维 云智慧 智能运维AIOps

Kafka的灵魂伴侣Logi-KafkaManger(2)之kafka针对Topic粒度的配额管理(限流)

石臻臻的杂货铺

kafka 后端

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
Facebook已将HHVM/JIT用于其开发和产品中_PHP_Abel Avram_InfoQ精选文章