3

私は最近、デフォルトのインストールでも完全に機能する magento CE のフル ページ キャッシュはないと述べた開発者と話をしていました。

これについての私の経験は同じです。

aoe_static の素晴らしいモジュールと phoenix のフル ページ キャッシュを varnish モジュールで使用すると、それに近づくことができます。

aoe_static モジュールを使用すると、キャッシングはアクションごとに行われます。これは私には理にかなっているようです。ホール パンチングは、レイアウト xml を介して適用されるプレースホルダーと、キャッシュされない ajax 呼び出しを介して要求される動的ブロックを使用して行われます。Cookie もこの呼び出しで設定されます。彼は、ワニス 2 で動作するデフォルトの vcl を提供し (チェックしたことはありません)、ワニス 3 用に簡単に変更できます。

キャッシュの無効化は、phoenix モジュールによって適切に処理されます。モジュールのコントロール フォルダーにメソッドが表示されます。これにより、製品またはカテゴリが変更されたときにキャッシュが無効になり、製品ページとカテゴリ ページの両方が無効になります。ただし、階層化されたナビゲーションによって生成された URL はキャッシュされる可能性があります (vcl によって異なります)。これらは無効化されていないので、気をつけてください。

これらのモジュールを実稼働サイトで使用する前に、これらのモジュールに他に問題があるかどうかを知りたいです。誰かが私に問題を指摘できれば、喜んで解決策を投稿してみたいと思います。

ただし、階層化されたナビゲーション URL の場合、モデルは、生成された URL をカテゴリ ID とともにログに記録する必要があります。URLとカテゴリの2列のモデルを持つのは簡単だと思います。キャッシュの無効化では、モデルをチェックして余分なURLを無効にする必要があります。これは、メイン カテゴリの URL の作成と同時に行う必要があります。悪くはありません。誰かが私の非常に簡単な説明を受け取った場合は、時間を無駄にする前に、何かが足りないかどうかアドバイスしてください.

私はむしろ、少なくともデフォルトの 1.7 インストールでの信頼性について (当然の) 評判を持っているコミュニティの助けを借りて (またはリーダーの経験が豊富な人)、オープンソース プロジェクトを作成したいと考えています。最も賢明なことは、すべてのエッジ ケース (デフォルトの 1.7 インストールの場合) をカバーまたはドキュメント化した 1 つのモジュールを作成することだと思います。

誰かがそのような使命を果たす方法を知っていますか? apc または memcached を使用してこれを行うためのコミュニティ サポートがあれば、ホスティングの可用性を高めるにはより賢明かもしれません。ロジックや開発時間はあまり変わりません。

これは、覚えておくべきブロックのセッションキャッシュをカバーするように拡張できますが、信頼できるフルページキャッシュに焦点を当てることが優先されるべきだと思います.

vcl でデバイスを検出することもできます。これは、モバイル版が必要なショップに追加できますhttps://github.com/varnish/varnish-devicedetect/blob/master/devicedetect.vcl

このプロジェクトのメールを作成したので、参加したい場合は「magefpc gmail com」です。magento、git、およびデバッグの経験がある人なら誰でも歓迎します。

ありがとう

4

2 に答える 2

1

この投稿を、特定のハンドルへのアプローチと、phoenix または aoe_static モジュールにまだ含まれていない場合に必要なキャッシュと無効化のロジックの提案を詳述するコミュニティの回答にしたいと思います。基本的にキャッシングは aoe_static モジュールに配置されたモジュール/コントローラー/アクション パターンによって行われ、既存の無効化のほとんどは Phoenix モジュールに存在します。

そのため、どのブロックを ajax 経由でレンダリングする必要があるか、および追加のキャッシュの無効化が必要な場所を決定する必要があります。gondo が言うように、キャッシュ検索にはさらに多くの無効化ロジックを追加する必要があります。カタログ、cms、aw ブログのページを小さくして開始する予定です。ここでは多くのことが行われていますが、もう少し必要です。gondo の助けを借りて、検索も追加できれば :)、それは素晴らしいことです。

たとえば、静的ブロックの保存と同様に、ウィジェットのインスタンスが問題になる可能性があります。これは (私の非常に簡単な調査が示す限り)、core_model_abstract メソッド _beforeSave() によってディスパッチされたイベントを使用して完全なキャッシュ無効化を実行するだけで簡単に解決できます。

  Mage::dispatchEvent('model_save_before', array('object'=>$this));

キャッシュ全体を無効にする前に、モデルのタイプを一致させる必要があります。このパターンは、キャッシュ無効化の他の困難な領域でもリアルタイムの節約になります。instanceof メソッドを使用しても問題ありませんが、確認するモデル名を知る必要があります。コードはとても簡単ですが、モデルが欠けているため、ここではコミュニティの関与が素晴らしいと思います。

ウィジェットは、フロントエンドの観点からは基本的に同じです。製品を含むものは aoe_static でロードする必要があります。製品は頻繁に変更されるためです。ただし、静的なものは静的 (html) ブロックとして扱うことができます。

製品が保存され、製品がウィジェットに含まれているかどうかを確認できないときに、キャッシュ全体を無効にしたくありません。ただし、aoe_static モジュールはレイアウト レンダリングで動作します。ウィジェットは、レイアウト xml を介して含める必要があります。よくあるように、管理 wysiwyg には含まれません。これらのウィジェットは、コール コントローラー ハンドルに追加でき、必要なハンドルにプレース ホルダーを追加できます。

完全なワニスの無効化は、時々、ベッドのことではありません。キャッシュの無効化が頻繁に発生する場合、または必要なときに発生しない場合は、キャッシュ全体の無効化が問題になります。主な目標は、すべての無効化シナリオをキャプチャし、管理パネルで通知をトリガーすることです。これは、製品を保存するときに表示されるのと同じタイプのメッセージです:「1 つ以上のキャッシュ タイプが無効になっています...」このようにして、管理者は決定を下すことができます。キャッシュを手動で無効にするか、待機する場合。また、このシナリオに基づいて、いくつかの自動無効化ロジックが組み込まれている場合もあります。

また、階層化されたナビゲーションによって作成された URL を格納するモデルを作成する必要があり、これらはカテゴリ ビューの URL と共に無効にする必要があります。

階層化されたナビゲーションと一般的な無効化を念頭に置いて、属性が保存されるときにキャッシュ全体を無効にする必要があります (私は思います)。

SEO目的でajaxなしで製品ページに製品レビューを掲載できるはずです。

これは、レビュー モデルが保存されるときに、model_save_before イベントを使用してチェックする必要があり、製品ページの URL を無効にする必要があることを意味します。この保存により評価が変更されますが、このブロックは ajax 呼び出しで取得されることをお勧めします。それはseoにとって重要ではありません。これは、製品ビューとリスト ページに当てはまります。

レビュー モジュール ページをキャッシュして無効にすることもできますが、これは大多数のユーザーにとって重要ではないため、待つ必要があります。

タグブロックが欲しい人。これらは ajax でロードできず、その目的に反します。同時に、彼らは今私たちの努力に値するものではありません。

セッションIDが追加されたURLをキャッシュすると、ユーザーはお互いのセッションを取得するようになります。これは、正規表現に基づいて vcl_fetch をパイプすることで簡単に解決できると思います。

この回答は乱雑になりつつあり、近いうちに再作成する必要があります。気軽に2セント追加してください!!

于 2012-11-08T01:14:45.507 に答える
1

aoe_static で発生する可能性のある問題の 1 つは、現在、拡張機能が製品をログに記録しないため、表示された製品に関するバックエンドの統計が更新されないことです。これは最近、TODO ノートとして github に追加されました。

ニスとマジェントキャッシュの問題は、マジェントがページ、ブロックの一部をキャッシュし、ニスがページ全体をキャッシュすることです。したがって、フェニックスソリューションにはオブザーバーが配置されており、製品/カテゴリの更新に応じてワニスをリセットしても、リセットする必要があるブロックがmagentoにまだあります。aoe_static はこれを解決しようとしますが、それはページ上の可視ブロックに対してのみ行われます。ただし、階層化されたナビゲーションなど、magento の他の部分は、製品/カテゴリの更新時に内部的にリセットされる可能性がありますが、ワニスではリセットされません。2つの解決策があります。製品/カテゴリの更新後にリセットされないフロントエンドのマジェントのすべての部分を特定し、それに aoe_static ソリューションを適用します。つまり、レイヤード ナビゲーションを ajax 経由でロードする必要があります。または2番目の解決策は、フェニックス拡張機能にロジックを追加して、より多くのワニスページを無効にすることです。

カスタム拡張機能 (製品を表示するページ) がいくつかあり、製品/カテゴリが更新されるたびにそれらの拡張機能を無効にするロジックを構築します。これも無効にする必要があるため、現在検索に取り組んでいますが、複雑な部分は、ブロックとキャッシュの無効化ロジックを回避することです。

全体として、適切なキャッシュの無効化は、Web 開発の最も難しい部分の 1 つです。

于 2012-11-07T14:29:51.633 に答える