特定のブロックのキャッシュを無効にする


9

ビューから生成されることを知っているページの更新ごとに更新する必要がある特定のブロックを除いて、匿名ユーザー向けのDrupal 8キャッシュメカニズムのメリットを引き続きページに与えたいと思います。

技術的に可能ですか?どうやって?


MPDが指摘したように、max-age設定を使用します。また、ブロック編集フォームのUIを使用してこれを行うこともできます。

私もこの問題を抱えています。Drupalがこれを自動的に処理しないのは厄介です。キャッシングは優れていますが、Drupalは動的なWebサイト向けであると考えられています...
James

回答:


1

そのビューブロックは何を示していますか?

D8には、何かが変更された場合にブロックを自動的に無効にするキャッシュタグとコンテキストがあります。

したがって、ノードのリストがある場合、ノードが追加または更新されるたびに、そのブロックは更新されますが、それまでは、キャッシュされたバージョンが使用されます。これは、すべてのページで再構築するよりもはるかに優れています。

また、ページキャッシュでも機能します。これらのページも自動的に更新されます。

多くの場合、手動で構成する必要なく、箱から出してすぐにキャッシングを行うことができます。

編集(コメントに対応):

ランダムソートプラグインでランダム?これにより、そのブロックは自動的にキャッシュ不可としてマークされます。ただし、ページキャッシュモジュールには影響しません。新しいsmartcache /動的ページキャッシュモジュールが追加されましたが、次のベータ版(またはRC!)でのみ提供されます。これにより、最終的にページの残りの部分をキャッシュして、その部分を構築することができます。

しかし、このようなケースはおそらくいくつかのJavaScriptを使用して実装するのが最善です。少数のノードしかない場合は、それらをすべて表示し、デフォルトで非表示にして、それらの1つをランダムに表示することができます。または、ランダムな広告を返すJavaScriptでURLをリクエストするか、それぞれが広告を返すN個のURLにランダムにアクセスします(たとえば、URLのリストを返し、そのうちの1つを選択します。イメージURLに対して直接行うこともできます。 。


広告ブロックを変化させるために、ビューはランダムなノードを返します。
アミン

クリーンソリューションの次のリリースを待つつもりです:)
Amine

はい、ランダムはViews Random Sortプラグインからのものです。私は同意します。エンティティをリストに入れるJavaScriptブロックコンテンツを生成し、ブラウザレイヤーでランダムまたは循環関数を使用してそれらの1つを選択してAjaxすることを決定することは可能です。ただし、一部のページにはこのようなブロックが複数あり、サーバー側のソリューションが最適です。
アミン

10

これがカスタムブロックの場合は、キャッシュAPIを使用して、キャッシュの最大経過時間を0に設定できます。

$build = [
 // ...
 '#cache' => [
   'max-age' => 0,
 ],
];

それが既存のブロックである場合は、それを変更して、これをレンダー配列に追加できます。


質問で説明したように、私のブロックはビューブロックです。php / moduleレイヤーで干渉するには複雑すぎると思います。
アミン

1
残念ながら、これはとにかく機能しません(試してみました)。ページがページキャッシュから配信され、古いブロックが含まれているようです。しかし、私はまだ調査中です。
Rainer Feike
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.