2016-09-12 10 views
0

私はビューでブログをした、私は必要なものLaravelキャッシュビューまたはコントローラの応答

header.blade.php - prints dynamic navbar along with categories and login info. 

content.blade.php - prints dynamic content of the page. 

sidebar.blade.php - prints dynamic related articles. 

footer.blade.php - prints static & some php dynamic content(date). 

content.blade.phpsidebar.blade.phpfooter.bladeをキャッシュすることです.php。これは私が考える限り、負荷を軽減するのに役立ちます。

私はキャッシュしたくありませんheader.blade.php現在のユーザー情報といくつかの動的js varsを出力します。

コントローラの場合、function_name(argument_var)をキャッシュしたかったのです。そのため、同じargument_varを持つ同じ関数が2回目に呼び出されると、memcahcheのようにdbと通信することなく、応答がすぐに書き戻されますが、使用されません。

キャッシュを制御できるようにする必要があります。

私はsome Cache tutorialsを見ました。しかし、私はまだそれが遅くなるのを見て不幸です。

ディスク上にキャッシュとしてhtmlファイルを作成しようとしましたが、コントローラーが少なくて済みそうです。ttfbすべての最初の応答です。

答えて

2

あなたがしたいことは、かなり複雑です。私はこれまでにこの問題を解決して解決しましたが、私は後で説明しようとする理由から、解決策を推奨しません。まず、Laravel Viewモジュール(vendor/laravel/framework/Illuminate/View)のコードを読んで、何が起きているのかを知ることが重要です。

ブレードテンプレート(filename.blade.php)は、<ハッシュ> .phpのような名前でstorage/framework/viewsに保存されたPHPファイルにコンパイルされます。ブレードをHTMLにレンダリングするのに要する時間の大部分は、実際にはPHPにこれらのビューをコンパイルする際に取り上げられます。

これらのビューがディスクに格納されると、PHPエンジンはそれらをディスクからPHPコードとしてレンダリングします。メモリからコードをコンパイルするPHPエンジンを取得するのは非常に難しいですが、実際にはディスクから実行するよりもはるかに高速ではありません(PHPののeval()コールをインクルード)コール。さらに、include()呼び出しを実行しているPHPコンパイラによって作成されたオペコードは、opcodeキャッシュ内にキャッシュされています(あなたが持っていると仮定します)、eval()コールで作成されたオペコードはありません。つまり、コンパイラはeval()呼び出しごとに呼び出さなければなりません。

それでは、私が推薦することです:

  • は、PHPに.bladeコンパイルしてRAMに、あなたのために働くことはないだろうことを保存するの誘惑を無視します。
  • アクセス速度を上げるために、storage/framework/viewsディレクトリにramdisk(例:/ dev/shm)を配置します。そのディレクトリを/ dev/shm(ブート時に行う必要があります)にリンクするか、特定のfstabエントリをそのディレクトリに入れます。
  • キャッシュされたビューが実際にスピードに必要なものである場合、RAMからコンパイルしてPHPコードにコンパイルできないsmartyなどの代替テンプレートエンジンを検討してください。

私は役立つことを願っています。View :: phpEngineコンパイラ(PHPコードからHTMLを作成する)の出力をキャッシュすることは可能ですが、それは面倒で、Laravel内でいくつかの厄介なハックを伴います。私はLaravel 3のためにそれを一度やりましたが、支払いはうまくいかなかったので、もう一度試してみることを勧めません。

+0

あなたの答えに感謝します。まったく同感です。 PHPの専門的な経験を経ていても、私はしばしば必要とする完全なコントロールを私に与えることができないので、嫌いです。私は、この機能を得るために、新しいフレームワークの作成に着手すると思います。たぶん今、別の言語に切り替える時が来ました.RRRのようなものをお勧めしますか? –

関連する問題