HipHop

Facebook神秘的PHP项目HipHop for
PHP终于揭秘面纱。这么些项目由一个PHP到C++的更换程序,2个重新达成的PHP运维库,和广大常用PHP扩展的重写版本构成,指标是旨在加速和优化PHP。

用推特官方博客(无法直接待上访问)上项目COO赵海平(清华1九八7届遗传与分子生物专业,Prince顿总结机科学大学生)的话说,HipHop项目对Facebook影响巨大。它近来曾经帮忙了推特十分九的Web流量。由于HipHop,推文(Tweet)Web服务器上的CPU使用平均压缩了二分一,从而大大缩短了服务器的需求。为了让这一改革也有益于社区,他们操纵将之开源,希望能够尤其扶持进步越多大型复杂PHP网址的可伸缩性。

Ajax 1

PHP和Facebook的问题

让人惊叹,Facebook的前端紧要是用PHP写的。赵海平说,过去陆年照片墙从PHP语言的进展上收入良多。PHP非凡简单,易学易用,好读好调节和测试,由此新工程师成长急忙,有利地推向了推特(Facebook)的越来越快的更新。

PHP是一种脚本语言,其利益是编制程序功能高,能够帮助产品的长足迭代。不过与价值观的编写翻译语言相比较,脚本语言的CPU和内部存款和储蓄器使用频率倒霉。随着Ajax技术的周围应用,加上SNS对动态需求较高,这几个老毛病更体现杰出。对于每月超越5000亿次PV的Instagram来说,如何落到实处扩张,特别具有挑战性。

Ajax,大规模的措施是直接用C++重写PHP应用中相比复杂的有个别,作为PHP扩充。实际上,PHP就转变为壹种胶水语言,连接前端HTML和C++应用逻辑。从技术角度讲那也未尝难题,可是扩充了技术须求,能够在全部应用上行事的工程师数量就大大减少了。学习C++只是编写制定PHP增添的首先步,接下去还要通晓Zend
API。由于推特(Twitter)的工程团队较小,每一种工程师要援助100万上述的用户。某个代码不是团伙里每一个人都能看懂,这对于推文(Tweet)是无力回天承受的。

推特网址自身的可伸缩性更具挑衅性,因为大概每一趟页面浏览都以有天性化体验的登录用户发起。浏览主页
时,系统需求查询全数朋友、朋友最珍视的气象更新、
依据隐衷设置筛选结果,然后还要来得评论、照片等等动态,那1体都急需在1秒内完结。

自200七年以来,推特(TWTR.US)(Twitter)曾写过两种差异方法化解这几个标题。在那之中囊括用另
1种语言重写照片墙,但是由于开发的错综复杂和进程等原因,未能兑现。他们还重写了PHP的主导部分Zend引擎,并交由给了PHP项目,但结尾依旧未有博得所需的品质。最后,他们接纳了HipHop,终于可心如意。

有了HipHop,工程师能够编写代码,用PHP编写组合最后页面包车型地铁逻辑,并能够继承高速迭代,同时后端服务应用C++,
Erlang, Java, Py thon编写,提供新闻提要、搜索、聊天和其余主旨功效。

HipHop开发传说

赵海平透露,项近年来期是发源几年前照片墙集团2回哈克athon活动(职员和工人在3个夜晚自由发挥,实验新的想法),他手工业将PHP转换为C++代码,就算语法上很周围,可是无论CPU还是内部存款和储蓄器使用,转换后的C++代码都大大优于PHP。于是她想,如若构建3个种类,编制程序实现转移,会什么啊?

以前,已经有了过多立异PHP品质的艺术。Zend引擎在运维时转换PHP源代码为运维在Zend虚拟机上的opcode。开源项目APC和eAccelerator将出口缓存,为多数PHP网址所运用。其它,还有Zend
Server那样的经济贸易产品,通过opcode优化和缓存,提升PHP速度。赵海平选取了另一条道路,将PHP直接转为C++,然后再变开销地机器码。当然,有为数不少开源项目也是相同的思绪,Roadsend和phc编译为C,Quercus编写翻译为Java,而Phalanger编译为.NET。

哈克athon之后半年,赵海平拿出了原型,足以验证那条路能够走通,编写翻译后的代码的确越来越快。不久,Iain
Proctor和Minghui
Yang加入进来。接下来又开发了十二个月,在生产服务器上测试了八个月。然后正式上线计划,五个月未来,推文(Tweet)(推特(TWTR.US))十分之九以上的Web流量都选取了HipHop。

按赵海平的布道,凭借HipHop,照片墙Web服务器上的CPU使用平均压缩了3/陆,从而大大减弱了服务器的必要。项目对推特(TWTR.US)影响巨大。为了让那1改革也方便社区,他们操纵将之开源,希望能够越来越扶助进步愈多大型复杂PHP网址的可伸缩性。

Ajax 2

HipHop的原理

HipHop将PHP代码转换为高度优化的C++代码,然后再用g++编写翻译器编译。它能够保险语义等效地实践源代码,但为了增强质量,就义了有些很少用到的特色,比如eval()。

HipHop开发中的首要困难在于,在PHP和C++这二种很差异等的语言之间怎么落到实处转移。尽管PHP也足以写一些很抢眼的动态性格,不过多数PHP代码照旧万分不难的。if
(…) {…} else {..} 比foo($x) { include $x; }
肯定越来越宽广。这为质量进步提供了机遇。HipHop生成的代码尽恐怕地行使函数和变量的静态绑定。同时,还使用项目推演来选出变量最恐怕对应的有个别项目,从而省去内部存款和储蓄器。

更换进程分三步:

  1. 静态分析。收集注解提到和依靠关系等音信。

  2. 类型推演。选用最合适的连串,是C++的标量?依然String, Array, classes,
    Object也许Variant。

  3. 代码生成。大多数一直将PHP语句和表达式对应为C++的话语和表明式。

在开发进度中,还有二个副产品:HPHPi,是1个实验性的解释器。通过它,不编写翻译PHP源代码也足以运转。它早已用于HipHop本身的调剂中。

HipHop在维持了PHP优点的同时,也兼得了C++的习性优势。项目累计有30万行代码,陆仟多个单元测试。全数这几个都将以PHP开源许可证格局透露到GitHub。

越来越多音讯,能够申请参预HipHop的邮件列表:

http://groups.google.com/group/hiphop-php-dev

相关文章