Drupalブートストラップのキャッシング


10

誰かがDrupalでブートストラッププロセスを「キャッシュ」しようとしたかどうか知りたいです。

通常、Drupalはリクエストごとに7つのブートストラップフェーズを実行しますが、おそらくデプロイされた本番システムでは、これらの一部またはすべてを「取り除く」ことができますか?

私が考えている可能性のある提案は

  1. ブートストラップ状態をシリアル化してmemcacheに固定する
  2. スクリプトは、特定の情報をファイルにハードコードするbootstrap.incのパッチを生成できます。
  3. David Straussは、ブートストラップされたDrupalをlibeventで実行し続けようとしたと思います。
  4. 他の狂気?

どのような試みがあり、どれが(ある程度)信頼できることがわかっていますか?


これは、Drupalのコンパイルに関する私の質問に何らかの形で関連しています:drupal.stackexchange.com/q/11738/2916
Refineo

回答:


12

PHPはシェアードナッシングアーキテクチャです。これには長所と短所があります。

欠点の1つは、このようなことを行うのが容易ではないことです。どこかに保存できる状態はあまりありません。

いくつかの簡単なテストを行い、ログインすると、ブーストラップが合計時間の約17%を占めているようで、その50%以上が実際にすべての.moduleファイルと.incファイルをロードしています。これはmemcacheに保存できるものではありません。また、memcacheやデータベースキャッシュを使用しても、それほど問題にはならないようです。

ページキャッシュを有効にしたときにいくつかの結果を取得しようとしましたが、Xhprofは信頼できる結果を返さないようです。全体が速すぎるようです。しかし、それでも、最大の部分はinit / exitフックの実行とそれが見えるファイルのロードを含みます。そこで興味深い問題が見つかりました。Userモジュールは、.moduleファイルのエンティティコントローラーが原因でレジストリをトリガーするため、キャッシュされたページの応答が大幅に遅くなっているようです。

とは言っても、David Straussはコペンハーゲンで実験的な作業を示し、ブートストラップ後にメモリスナップショットを作成し、ページが提供されたらそのスナップショットに戻りました。彼はそのためにDrupal 6を使用しました。上記の数値を確認した後、Drupal 7でこれを行うことによるパフォーマンスの向上はかなり小さいと思います。これの1つの理由は、データベース接続がレイジーロードされており(たとえば、最初のクエリを実行する前にMemcacheを使用すると、ブートストラップがかなり遠くなる可能性があります)、多くのキャッシュが存在することです。

本当に Drupalの7に悪いことは、これらの巨大な配列と無限再帰やループとレンダーレイヤです。これは、Drupal 7に入ったすべてのパフォーマンス作業をほとんど元に戻します。Twigがコアにした場合、Drupal 8でどのように見えるかを見てみましょう。

最後に、前述の利点について。大きな利点の1つは、要求ごとにすべてが解放されるため、メモリリークはあまり関係がないということです。メモリ使用量が常に増加し、定期的に再起動する必要がある多くのJavaアプリケーションを見てきました。


4
そう愛がサイト@Berdirにあなたを持つ;)
Letharion

Alex Bronsteinはスプリント中に、APCでもtpl.phpファイルをインクルードするのは少し時間がかかると述べましたが、Twigはクラスにコンパイルされるため、ノードのようなページでの勝利と多くのコメントになります。様子を見よう。

キャッシュされたページに対して、一連の書き換えルールを生成し、それらを.htaccessに配置し、HTMLページを伴ってPHPを完全にバイパスするシステムを作成できると思います。しかし、IIS、nginx、ログインユーザー、...
Bart

1
@Bart:あなたはBoostを再発明しました:drupal.org/project/boost :)
Berdir

5

いいえ、https: //code.launchpad.net/~fourkitchens/pressflow/6-eventedでkargo-event(現在はKellnerと呼ばれています)を実験していたのはDavid Straussでしたが、深刻な問題が発生したとは思えません。

Drupal 7にすでに多くのブートストラップがキャッシュされcache_bootstrapています。そのためのビンがあります。それをmemcachedに貼り付けることができます。

Drumalコードの一部または多くをCに移動することで、オーバーロードしてコードのロードを減らすことができます。Damienとdhthwyが作成したPHP拡張機能(http://drupal.org/project/drupal_php_extで作成)では、それほど多くは行われていません。またはヒップホップを行います。ヒップホップとDrupal 7の現在の状態はわかりません。

ただし、結局のところ、Drupal 7(およびすべての貢献者)でヒップホップを機能させるなどのエンジニアリングコストをよく検討し、それを数台のサーバーのレンタルと比較する必要があります。サーバーの5%を節約でき、サーバーが100 000台ある場合、それを実行しますが、Facebookですか?最適化は慎重かつ経済的に行ってください。


ありがとうございます。質問を更新し、あなたの名前を削除しました。:)多くの場合、パフォーマンスを処理するためのはるかに効率的な方法があることに気づきました。
Letharion、2012年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.