HHVMでのYii2テスト

みなさんこんにちは! 最近、Yii2がリリースされ、多くの新機能とHHVMがサポートされていると開発者は99%の互換性があると言います。 データベース全体のサンプル、データのシリアル化(非シリアル化)、json-エンコード、デコード、ActiveRecordの操作など、ライブサンプルを使用して、このすべてを取得して実際に試してみましょう。 しかし、最初に、車自体について少し説明します。 HHVMは、PHPコードを実行およびJITコンパイルするためのFacebookの実験的な仮想マシンです。 そのため、リソースを集中的に使用するタスクで生産性を数倍、または5〜9倍も向上させることができます。 プロジェクトは存続し、積極的に開発されています。 新しいバージョンのリリースに関しては、 Habrの記事によく書かれています



HHVMで行われたことは最適化されています。



-特に5.6でのphp機能のサポート、関数のサポート:evalおよびcreate_functionが最近のバージョンで追加されました。

-新しいHackプログラミング言語が作成されました-php-静的型付けの同様の言語。

-再加工されたAPCキャッシュ。HHVMを含む代わりに、非常にリソースを消費することが知られているシリアル化(非シリアル化)の機能が削除されました。

-JSONデータエンコーディング、UTF8 / UTF16変換用の高速化された機能。

-低コストの参照カウント-PHPの各行、配列、またはオブジェクトには参照カウンターがあり、変数が値に関連付けられるとカウンターが増加し、変数が範囲外になるとカウンターが減少します。 このような操作は、かなりのプロセッサー時間を消費します。 参照カウントが不要なときに参照カウントを回避しようとする別のコンパイラーが開発されました。

-メモリ割り当ての改善-問題領域が最適化されました。 メモリーが割り当てられ、それ以上使用されない場合、解放されます。



HHVMをインストールします。



現在、すべての一般的なディストリビューションのパッケージのインストールとソースコードのコンパイルが可能です。

こちらのサポートをご覧ください

HHVM(バージョン3.3.1)は、Debian 7.7およびUbuntu 14.04のパッケージから問題なく巻き上げられました

設置
wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add - echo deb http://dl.hhvm.com/debian wheezy main | sudo tee /etc/apt/sources.list.d/hhvm.list sudo apt-get update sudo apt-get install hhvm
      
      







インストール後、構成ファイル/etc/nginx/hhvm.confが作成されます。このファイルには、場所の基本設定がすでに記録されています。 / etc / nginx / sites-available /にyiiのホストのみを作成できます

最小限の設定例
 server {   root /www/hhvm.re/public_html;   index index.html index.htm index.php;   server_name hhvm-yii.local;   include hhvm.conf;   location / {       try_files $uri $uri/ /index.php?$args;   }   location ~ /\.ht {       deny all;   } }
      
      







それだけです、作曲家を通して通常の方法でYiiをインストールしてください。

hhvmを起動し、nginxを再起動します。

HHVMが起動するはずです。 そうでない場合は、ログ/var/log/hhvm/error.logを見ることができます

hhvmには独自の/etc/hhvm/server.iniがあり、PHP構成を調整することもできます。



テスト時間。



テストは、古い2x核ラップトップ、amd 64、@ 1.9 GHz 4 GB RAMで実行されました。

Debian 7.7、

Nginx 1.2.1、

MySQL 5.5.38

1つの構成:php-fpm 5.6

2番目:hhvm 3.3.1



各テストを10回実行して、作業時間の平均値を計算します。



1.箱から出してYii2を起動しても、ほぼ同じパフォーマンスが示されました。 どうやら、フレームワークは何かを最適化するのに十分なほど軽量です。 こんにちはワードプレス)



2.ページネーションと異なるウィジェットで300のニュースを出力します:



 $newsList = new ActiveDataProvider([ 'query' => News::find(), 'pagination' => [ 'pageSize' => 30, ], 'sort' => false, ]);
      
      







3.次に、サプライヤ、ストア、カテゴリへの所定のリンクを使用して、5k製品などのより多くのデータを取得します。 軽視されないように、1ページに300個の製品を表示しています。 利益はありますが、私たちが望むほどではありません。



 $productList = ActiveDataProvider([ 'query' => Product::find() ->where([ 'statusId' => 1, ]), 'pagination' => [ 'pageSize' => 300, ], 'sort' => false, ]);
      
      







4.標準タスク。 500のカテゴリがあります。 各カテゴリの製品の数を数えます。 もちろん、結果をキャッシュに保存し、別のフィールドのどこかにカウントを保存できます。 しかし、実行時にそれらを解決したいだけです。見てみましょう。



 $categoryList = ProductCategory::find()->all(); $listCount = []; foreach ($categoryList as $category){ $listCount[] = Product::find() ->where(['id_category' => $category->id]) ->count(); }
      
      





ここで、結果はすでにより興味深いもので、ほぼ4倍に増加しています。 悪くないでしょ?



5.シリアル化(逆シリアル化)たとえば、商品のオブジェクトをある種のMemcacheに保存したいと考えていました。 それらがどのくらい速くパック/アンパックされるか見てみましょう。 操作は非常に高価であり、特にビッグデータでは議論の余地がありません。 3.67倍の増加:



 $productList = Product::find()->all(); foreach ($productList as $product){ $serialize = serialize($product); unserialize($serialize); }
      
      







6.多くの場合、jsonでデータをエンコード/デコードする必要があります。 特に、さまざまなREST Apiサービスまたは単一ページアプリケーションのデータサンプリングに関連します。 HHVM処理は印象的で、5倍高速です。



 $productList = Product::find()->all(); foreach ($productList as $product){ $encode = json_encode($product); json_decode($encode); }
      
      







7.最後に、Redisでデータを書き込むモデルを作成してみましょう。 Yii2はこのための素晴らしい機会を提供してくれます。 頻繁に記録、データサンプリングを行うタスクでは、データをキャッシュする意味がありません。



 for ($i=0; $i < 5000; $i++){ $customer = new Customer(); $customer->attributes = ['name' => $i]; $customer->save(); }
      
      







結果表:

テスト名 Yii2 php5-fpm(秒) Yii2 HHVM(秒) 速度ゲイン
1.箱から出して 0.10 0.09 1,1
2.ニュース出力 0.17 0.16 1.06
3.結論5k。 商品の 1.51 1.12 1.34
4.カテゴリ内の商品のカウント 2.82 0.63 3.61
5.シリアライゼーション/デシリアライゼーション 3.24 0.88 3.68
6. JSON(エンコード、デコード) 2.73 0.51 5.35
7. Redis(モデルActiveRecord) 10.53 4.43 2,37


さて、それですべてです。数字と顔の結果は原則として十分ではありません。HHVMからは肯定的な印象しかありませんでした。すべてを完了するために魔法の松葉杖やダンスは必要ありません。 PHPとYiiで必要なものはすべて十分にサポートされています。 私たちはまだいくつかの小さなプロジェクトを運転しなければならないと思います。 作品の安定性を見るのを聞くのは面白いでしょう。誰かが制作でそれを使用した経験があれば落ちませんか? はい、テストの提案があれば、書いてください。私たちはそれを取り除こうとします。 皆さんに幸運を!



いくつかのリンク:

Yii2

Hhvm



All Articles