HipHop 实战

鉴客 发布于 2010/08/24 18:10
阅读 4K+
收藏 21

HipHop是什么?

HipHop是Facebook新近开源的一款软件,它可以把php代码转换成c++代码,并将其编译。据称,编译后在性能上会得到较大提升。

一、编译HipHop

  1. 建议使用ubuntu,参照这个文档,可以非常快地装好依赖的库。
  2. 别拿Linode去折腾,内存太小,吃不消的。如果手头没有合适的环境,建议在RackspaceCloud开一个Cloud Server来做。用完就关掉,估计也就一两块钱的事儿。我是在一个虚拟机上编的。
  3. 运行完make之后,可执行文件藏在 $HPHP_HOME/src/hphp下面,一开始我居然没找到。

二、编译PHP项目

  1. 编译过程中遇到错误,只要进入/tmp/hphp_xxx这个临时目录,解决掉相应问题,在该目录重新运行make即可。
  2. 如果牵涉到修改php文件,则需要从头开始先生成cpp代码,再编译。
  3. 如果php项目中有重复的类定义,可能遇到“No rule to make target `cls/atomentry$1.h’,” 这样的错误。WordPress中就有好几处(>=3)。我的解决办法是,把重复定义的类去掉。
  4. 编译还会遇到类似“undefined variable eo_1”的错误。要解决此问题,可打开相应的cpp文件,在报错行的前一行加入:
  5. Variant eo_1;
  6. 编译时的参数–cluster-count建议开大点,如果太小,会导致生成少数个大cpp文件,编译时非常占内存。
  7. WordPress中不需要的主题、插件都可以删掉。惭愧的是,很早以前我写的一个插件,会导致编译出错。

编译WordPress这个大玩意很需要耐心,我连续战斗了三个晚上,修改了多处代码,重编了无数次,终于泪流满面地看到编译成功的信息。

三、运行PHP项目

  1. 如果打算放到服务器上运行,还需要参考编译hiphop的教程把依赖的库先装好。可以用 ldd 命令查看依赖的库是否都满足了。
  2. scp到服务器之前,建议先压缩一下。我把WordPress编完将近80M,压缩之后只剩20M。
  3. 程序作为服务器启动后会有50多个线程,占用100M以上的内存。我没找到线程数这东西在哪里设置,小小一个blog,根本用不着这么多。
  4. 若打算长期使用而不是玩玩,可以参照这篇文章,使用nginx做一个反向代理。

值得一提的是,hiphop生成的中间代码(cpp代码),可读性相当好。

加载中
0
0
s
soyo

有个问题想请教下,是关于绝对目录和相对目录

php代码中include("../a/1.php"); 使用这种相对路径方式,hiphop编译后可以正常访问;

而代码中include("/tmp/aa/a/1.php");这种绝对路径方式,hiphop编译后不能正常显示;

由于项目代码中使用绝对路径方式比较常用,所以更改为相对路径比较繁琐,不知道有没有其它解决方案?

0
教父独白
教父独白

引用来自“soyo”的答案

有个问题想请教下,是关于绝对目录和相对目录

php代码中include("../a/1.php"); 使用这种相对路径方式,hiphop编译后可以正常访问;

而代码中include("/tmp/aa/a/1.php");这种绝对路径方式,hiphop编译后不能正常显示;

由于项目代码中使用绝对路径方式比较常用,所以更改为相对路径比较繁琐,不知道有没有其它解决方案?

其实hiphop-php有个虚拟绝对路径的概念。

代码中不要用相对路径,而要用物理绝对路径。

define('ROOT_DIR', dirname(__FILE__));

include ROOT_DIR.'/aa/a/1.php';

编译的时候要配置--input-dir和--input-list参数

运行的时候要配置-v Server.SourceRoot参数

0
慕容日华
慕容日华
問一下:windows下可以安裝使用嗎,朋友叫我問的!
0
Neeke
Neeke
国内有项目应用吗?
0
刘赤龙
刘赤龙
视乎不支持MSSQL连接
返回顶部
顶部