ほぼ3週間前
、 Facebookからの新しいプロジェクト
が発表されました 。 HipHop-PHPと呼ばれます。
一般の人々にとって、ソースコード
は 1日前に
入手可能になりました 。
HipHopは、Facebookのパフォーマンスを向上させるために作成されました。 PHPコードをC ++コードに変換し、g ++でコンパイルします。 HipHopはオープンソースライセンスで利用できます。
この記事では、ソースからHipHopをビルドする方法とその使用方法について説明します。
組立工程
1.リポジトリを複製する
$ git clone git://github.com/facebook/hiphop-php2.必要なライブラリをインストールします
http://wiki.github.com/facebook/hiphop-php/building-and-installingにリストされている必要なライブラリをインストールし
ます 。 最小バージョンに注意してください。
備考:- TBB(スレッドビルディングブロック)の場合、最小バージョンは2.2ですが、これは記述されていません
- 開発者からのパッチでlibcurlおよびlibeventを再構築する必要があります
「 struct evhttp_requestにext_methodという名前のメンバーがありません 」というメッセージが表示された場合-libeventにパッチを適用していないことを意味します - また、 Google Perftoolsをインストールする必要がありました
3. libmbflライブラリをインストールします
$ cd hiphop-php$ gitサブモジュールの初期化$ gitサブモジュールの更新4.環境変数を設定する
$ export HPHP_HOME = `pwd`$ export HPHP_LIB = `pwd` / bin5.組み立ての前に
HipHopは
cmakeを使用してビルドします。 ソーススクリプトでは、一部のライブラリがスキップされました。
これを修正するには、パッチをインストールします。
$ curl sparcs.kaist.ac.kr/~tinuviel/hiphop/cmake-missing-library.diff | パッチ-p16. 32ビットシステムを使用している場合
HipHopはもともと64ビットアーキテクチャで作成されました。 32ビットを使用している場合は、パッチをインストールする必要があります。
$ curl sparcs.kaist.ac.kr/~tinuviel/hiphop/src-util-hash-long-long.diff | パッチ-p1$ curl sparcs.kaist.ac.kr/~tinuviel/hiphop/src-cpp-base-ssize_t.diff | パッチ-p1$ curl sparcs.kaist.ac.kr/~tinuviel/hiphop/src-lib-format-string.diff | パッチ-p17.組み立て
$ cmake。エラーがなければ、
$ makeDebian、Ubuntu、およびその他のアドオン
ここではインストールプロセスについて詳しく説明しますが、32ビットシステムのパッチを忘れないでください。
打ち上げ
内容を含むsrc / hphpフォルダーにindex.phpファイルを作成します
- < ? php
- echo 'Hello HipHop' ;
- ? >
コンパイルして実行:
$ time ./hphp index.php --keep-tempdir = 1 --log = 3
hphpを実行しています...
一時ディレクトリ/ tmp / hphp_71TLF1を作成しています...
入力の解析...
./index.phpの解析...
入力の解析には0'00 "(6 ms)(null)かかりました
事前最適化...
事前最適化には0'00 "(0 ms)(null)かかりました
型の推論...
型の推測には0'00 "(0 ms)(null)かかりました
最適化後...
最適化後は0'00 "(0 ms)(null)かかりました
CPPファイルの作成...
CPPファイルの作成には0'00 "(213ミリ秒)(ヌル)かかりました
CPPファイルのコンパイルとリンク...
CPPファイルのコンパイルとリンクに1'30 "(90733 ms)(null)かかりました
実行ファイル/ tmp / hphp_71TLF1 / program --file index.php ...
/ tmp / hphp_71TLF1に保存されたHello HipHopallファイル...
hphpの実行には1'31 "(91747 ms)(ヌル)かかりました
実際の1分31.791秒
ユーザー1m21.157s
sys 0m6.500s
/ tmp / hphp_71TLF1フォルダーには、かなり興味深いコンテンツが含まれています。
$ ls -l / tmp / hphp_71TLF1 /
合計25152
-rw-r-r-- 1 20673 2月21日12:19 CMakeCache.txt
drwxr-xr-x 6 4096 Feb 21 12:21 CMakeFiles
-rw-r-r-- 1 1558 Feb 21 12:19 cmake_install.cmake
-rw-r-r-- 1 2518 2月21日12:19 CMakeLists.txt
-rw-r-r-- 1 18343 2月21日12:19 Makefile
drwxr-xr-x 2 4096 Feb 21 12:19 php
-rwxr-xr-x 1 25653366 2月21日12:21プログラム
drwxr-xr-x 2 4096 Feb 21 12:19 sys
$ ls -l / tmp / hphp_71TLF1 / php
合計12
-rw-r-r-- 1 783 Feb 21 12:19 index.cpp
-rw-r-r-- 1 415 Feb 21 12:19 index.fw.h
-rw-r-r-- 1 475 Feb 21 12:19 index.h
ファイル/tmp/hphp_71TLF1/index.cの内容:
- #include <php / index.h>
- #include <cpp / ext / ext.h>
- 名前空間 HPHP {
- /////////////////////////////////////////////////// /////////////////////////////
- / *序文が始まります* /
- / *序文仕上げ* /
- バリアントpm_php $ index_php ( bool incOnce / * = false * / 、LVariableTable *変数/ * = NULL * / ) {
- FUNCTION_INJECTION ( run_init :: index。Php ) ;
- {
- DECLARE_GLOBAL_VARIABLES ( g ) ;
- bool & alreadyRun = g- > run_pm_php $ index_php ;
- if ( alreadyRun ) { if ( incOnce ) が trueを 返す ; }
- else alreadyRun = true ;
- if ( ! variables ) variables = g ;
- }
- DECLARE_GLOBAL_VARIABLES ( g ) ;
- LVariableTable * gVariables __attribute__ ( ( __unused__ ) ) = get_variable_table ( ) ;
- print ( "Hello HipHop" ) ;
- trueを 返し ます 。
- } / *関数* /
- /////////////////////////////////////////////////// /////////////////////////////
- }
その結果、コンパイルされたプログラムは
最大25メガバイトかかります
。ただし、コンソールモードに加えて、Webサービスモードで起動できます。
/ tmp / hphp_71TLF1 / program -m server -p 8080localhostで挨拶を見る
:8080 / index.php更新する 性能評価
構成
プロセッサー: 2xIntel®Pentium®Dual CPU T2370 @ 1.73GHz
オペレーティングシステム: Debian GNU / Linux squeeze / sid
Apache / 2.2.14(Debian)とmodphp
PHP 5.2.12-2とSuhosin-Patch 0.9.7(cli)(ビルド:2010年1月11日17:30:06)
gccバージョン4.4.3 20100108(プレリリース)(Debian 4.4.2-9)
テスト番号1。 「額に」
habratopic
「C ++パフォーマンスvs. Java vs. PHP vs. Python 額テスト $ time php test.php
回答:39
実際の0m32.308s
ユーザー0m32.258s
sys 0m0.012s
$ time / tmp / hphp_4C67mv / program --file test.php
回答:39
実際の1分6.683秒
ユーザー1m6.376s
sys 0m0.168s
$ g ++ test.cpp
$ time ./a.out
回答:39
実数0m1.758s
ユーザー0m1.744s
sys 0m0.000s
テスト番号2。 Apacheベンチマーク
test.php:
<?php
for($ i = 0; $ i <1000; $ i ++)
echo var_dump($ _ SERVER);
?>
WebサービスモードでHipHopを開始する: $ ./program -m server -p 8080
$ ab -n 1000 -c 5 http://127.0.0.1:8080/test.php
同時実行レベル:5
テストにかかった時間:67.019秒
完全なリクエスト:1000
失敗したリクエスト:0
書き込みエラー:0
転送された合計:1166084000バイト
転送されるHTML:1166000000バイト
1秒あたりのリクエスト:14.92 [#/秒](平均)
リクエストあたりの時間:335.096 [ms](平均)
リクエストあたりの時間:67.019 [ms](平均、すべての同時リクエスト全体)
転送速度:16991.44 [Kバイト/秒]受信
接続時間(ミリ秒)
最小平均[+/- sd]最大中央値
接続:0 0 0.1 0 2
処理:124335 56.5 340 477
待機中:120 329 56.2 335 467
合計:124335 56.5 341 477
Apacheとmodphpを使用して標準のPHPを実行する: $ ab -n 1000 -c 5 http://127.0.0.1:80/test.php
...
同時実行レベル:5
テストにかかった時間:27.180秒
完全なリクエスト:1000
失敗したリクエスト:0
書き込みエラー:0
転送された合計:1139183000バイト
転送されるHTML:1139000000バイト
1秒あたりのリクエスト:36.79 [#/ sec](平均)
リクエストあたりの時間:135.901 [ms](平均)
リクエストあたりの時間:27.180 [ms](平均、すべての同時リクエスト全体)
転送速度:40929.90 [キロバイト/秒]受信
接続時間(ミリ秒)
最小平均[+/- sd]最大中央値
接続:0 0 0.5 0 11
処理:52 136 32.2 137 216
待機中:0 3 1.5 3 17
合計:52136 32.2 137216
結論(個人的な意見)
2つのテストで、標準のPHPのほぼ2倍遅いことがわかりました。 ただし、これは最初のバージョンにすぎないことを忘れないでください。 HipHop自体のビルドプロセスは非常に難しく、そのためインストールはまったくありません。 PHPアプリケーションをC ++に変換する可能性を理解するためにのみインストールできます。 HipHopの明らかなマイナス点は、PostgreSQL(これまではMySQLのみ)のサポートの欠如と、既存のPHPモジュールを接続する機能の欠如です。 このプロジェクトがまだ先にあることを願っています。
以上です。 HipHopのリリースの詳細については、
こちらをご覧ください 。
GitHubには2つの興味深い分岐点もあります。
- http://github.com/h4ck3rm1k3/hiphop-php/-debパッケージを構築するためのアドオンが含まれています
- http://github.com/sanxiyn/hiphop-php/tree/32bit-32ビットバージョンのインストール済みパッチが含まれています