こんにちは、アジャストの渕上です。

Laravelを利用して開発進行中の案件があるのですが、
社内にはTwigに慣れ親しんだエンジニアが多いため、テンプレートエンジンをTwigに変更したいという要望が上がりました。

その際、念のためテンプレートエンジンを差し替えた場合の性能比較をしてみようということになったので、
結果をブログ記事として紹介させていただきます。

Blade

Laravelのデフォルトは”Blade”というテンプレートエンジンが採用されています。
シンプルで使いやすいテンプレートエンジンです。

PHPコードをテンプレートに直に書くこともできるので、
自由度が高い一方、本来Viewでやるべきでないようなことも(やろうと思えば)できてしまいます。

Twig

一方で”Twig”は主にSymfonyで採用されているテンプレートエンジンです。
Laravelに組み込むには“rcrowe/TwigBridge”を利用するのが簡単です。

こちらはPHPコードをテンプレートに直に書くことはできませんが、
関数やフィルタを自作して機能拡張することは可能です。

性能比較

さて、さっそく性能比較していきたいと思います。

テストケース

下記のようなケースをBladeとTwigでそれぞれ作り、
ApacheBenchを用いて、10クライアント同時接続で合計10000リクエストさばいた時の平均レスポンスタイムを計測してみました。
(ab -c 10 -n 10000 を実施)

ケース1. extends(テンプレート継承)もinclude(テンプレート読み込み)も使わないテンプレート
ケース2. extendsだけを利用したテンプレート
ケース3. extendsとincludeを利用したテンプレート(5種類のテンプレートをinclude)

実施環境

  • マシン さくらVPS2Gプラン(HDD)
  • PHP 7.2
  • Laravel 5.5
  • rcrowe/twigbridge 0.9.6
  • twig 1.3.5
  • nginx+php-fpm

結果

abを実施した結果は下記のとおりとなりました(単位はすべてミリ秒)

Blade Twig
ケース1 5.038 8.577
ケース2 6.286 10.099
ケース3 7.476 11.604

すべてのケースでBladeがTwigを上回るという結果になりました。
場合によっては、TwigよりもBladeのほうが4割位早く見えます、
が、このケースではDB接続などの重い処理をやっていないため、
実際には大した差にはならないのではないかと思います。