2012-03-25 20 views
8

ちょうどin this topicと同じように、私のアプリに関連するドキュメント(関連ドキュメント:Embedding controllers)にtwig "render"タグを追加するとdevモードでパフォーマンスに問題があります。Symfony2とTwigでパフォーマンスの問題が発生する

このレンダリングタグがないと、私のページは70ミリ秒未満で生成されます。 レンダリングタグでは、少なくとも170ミリ秒です。 そして、アプリケーションに追加された各レンダリングタグは、ページ生成を100ミリ秒増加させます(これは、通常のページは60ミリ秒で、レンダリングタグは100ミリ秒で動作します)。 私は、アプリケーションのすべてのページでそれらのうちの4または5が必要な場合がありますので、devモードでは各ページで少なくとも500ミリ秒を意味します。

私は完全にprodモードで問題はないことを理解していますが、明らかに開発が快適ではありません。 devモードで "render"タグを使用している間、無用な呼び出しやログ、コードを取り除く方法を誰かが知っていますか?

答えて

8

私はexplainedをわずか10時間前に持っています。長い話は短いです:Twig拡張に移行してください。

+2

この場合、コントローラロジック用のサービスを作成する方がよいです。コントローラのロジックにdb操作がある場合は、ロジックをtwig関数に移動しない方が良いと思います。別のサービスを作成することで、組み込みコントローラにルートが接続されており、独立して呼び出すことができる場合でも再利用可能性が保証されます。 –

+0

Twig拡張機能からサービスを呼び出すことを止めるものはありません。実際、それは私がしていることです。それはこのVSではない問題です。 My Twigの拡張機能は、サービスとして定義されたコントローラのアクションを呼び出すだけです。これらのアクションは、Twigの拡張機能なしで再利用可能です。 –

+1

このサービスは、 'app/config.yml'にtwigグローバル変数を追加することで、twigにさらされることもあります。物事を達成するためにちょうど異なる方法。実際に論争するものはありません:)。 –

6

コントローラーロジックをサービスに移動し、twigグローバル変数として参照し、コントローラーによってレンダリングされたテンプレートを含めることができます。

手順については、https://stackoverflow.com/a/13245994/982075を参照してください。

8

symfonyで私が気に入っている機能の1つは、コントローラコールを組み込んだレンダリングタグです。プロファイラは、速度だけでなく多くのメモリを使用するすべてのコントローラコールに多くのオーバーヘッドを追加します。あなたはそれをスピードアップするためのいくつかのオプションがあります。

プロファイラは、デフォルトですべてのデータをsqliteデータベースに書き込みます。 IIRC sqliteでは並列挿入が許可されていないため、すべての要求がデータコレクタをフラッシュするためにdbにアクセスするまで待つ必要があります。開発DB(mysqlなど)を使用して、プロファイラデータを保持することができます。 1年前に私はスピードの面でこれで多くを得ました。

サブリクエストのプロファイラを無効にすることも、例外が発生した場合にのみプロファイラを使用することもできます。詳細はthe framework config referenceを参照してください。

# config_dev.yaml 
framework: 
    profiler: 
     only_exceptions:  false 
     only_master_requests: false 
     dsn:     sqlite:%kernel.cache_dir%/profiler.db 
+0

私は、render_esi()を使ってprblを持っていました。この場合、@ m2mdasソリューションは実現不可能です。 – lrkwz

+0

それは確かに面白いトリックです:-) – MauganRa

2

選択はアプリケーションによって異なります。

1)ヘビーレンダリングテンプレートにはrenderタグを使い、hincludeライブラリを使用して非同期にロードします。これは、レンダリングされる各テンプレートが単独で「ゆっくり」(例えば、多くのDB接続、大きなテキストなど)にある場合に非常に役立ちます。

2)m2mdasで提案されているようにしてください。これは一般的なケースの非常に高速な解決策です。

関連する問題