background image

量都使用了 HipHop。

按赵海平的说法,凭借 HipHop,Facebook Web 服务器上的 CPU 使用平均减少了

50%,从而大大减少了服务器的需求。项目对 Facebook 影响巨大。为了让这一改进也惠及
社区,他们决定将之开源,希望能够进一步帮助提高更多大型复杂 PHP 网站的可伸缩性。

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,是一个实验性的解释器。通过它,不编译

PHP 源代码也可以运行。它已经用于 HipHop 自身的调试中。HipHop 在保持了 PHP 优点的
同时,也兼得了 C++的性能优势。项目总共有 30 万行代码,5000 多个单元测试。所有这些
都将以 PHP 开源许可证形式发布到 GitHub。