Cometプロジェクトのテンプレートエンジンを選択して、PHPコミュニティで人気のあるすべてのエンジンを比較することにしました。通常、この選択はフレームワークによって決定されます。シンフォニストはテンプレートをTwigでラップし、Laravelプログラマーはブレードで武装します。しかし、私は質問に興味がありました-これらのオプションはパフォーマンスの点でどのように異なるのですか?7つのエンジンと純粋なPHPをテストした後、私は答えを得ました。データ、スケジュール、チャンピオン、敗者-削減中!
彼は上位の申請者の名前を思い出し、残りはGitHubの統計とRedditに関する議論で武装しているのを発見しました。ここにリストがあります:Smarty:github.com/smarty-php/smartyプレート:github.com/thephpleague/platesMoustache:github.com/bobthecow/mustache.phpTwig:github.com/twigphp/TwigBlade:github.com / jenssegers /ブレードBladeOne:github.com/EFTEC/BladeOneLatte:github.com/nette/latte興味深いオプションを知っている場合-書き込み、テストに追加します。ブレードはLaravelにかなり深く統合されているため、スタンドアロンの実装をいくつか使用する必要がありました。残念ながら、それらはどれもBlade-Xコンポーネントをサポートしていません。ベンチマークの本質を理解するための最も簡単な方法は、純粋なPHPでコードのバージョンを確認することです。$data = [
(object) [
"code" => 200,
"message" => "OK"
],
(object) [
"code" => 404,
"message" => "Not Found"
],
(object) [
"code" => 500,
"message" => "Internal Server Error"
],
];
$html = '<html><head></head><body>';
foreach ($data as $message) {
$html .= "<p>$message->code : $message->message</p>";
}
$html .= '</body></html>';
これは、3つのオブジェクトの配列を2つのプロパティ(HTMLコードとその簡単な説明)を含むHTMLテンプレートに出力するための模擬テストです。Twigのアナログは次のようになります。<html><head></head><body>
{% for message in data %}
<p>{{ message.code }} : {{ message.message }}</p>
{% endfor %}
</body></html>
そしてこれはブレードです:<html><head></head><body>
@foreach ($data as $message)
<p>{{ $message->code }} : {{ $message->message }}</p>
@endforeach
</body></html>
テストは、4つのRyzen 3600コアと4Gメモリを搭載した仮想マシンのUbuntu 20.04 / PHP 7.4 / Comet 0.6コンテナで実行されました。wrk --connections=500 --threads=2 --duration=10s http:
この状況が判明し、各グラフは1秒で正常に処理されたリクエストの平均数を反映しています。
純粋なPHP-最初に予想されましたが、予想外に、Bladeはすでに半分ほど遅れています!そして、なぜ「軽量」プレートが「強力な」小枝より遅れているのですか?すべてのフレームワークは通常のキャッシュを使用するため、結果は実際のフレームワークに可能な限り近いものになります。ある記事の枠組みの中で、私は、コードの拡張分析、作業戦略、エンジンのキャッシュ、重要なテンプレートエンジンの選択基準の分析で読者を過負荷にしたくありませんでした。トピックが面白い場合-続編を書きます。広告として:近い将来にCometを見てください。RestfulAPIとマイクロサービスを作成するための最速かつ最も便利なPHPフレームワークにしてください:)