BrowserPageビューインスタンスの存続期間は通常、すでにリクエストの期間であるため、通常はplone.memoize.instance
メモ化デコレータを使用することもできます。
from plone.memoize.instance import memoize
class MyView(grok.View):
@memoize
def getExpensiveFunction(self):
# ....
結局のところ、BrowserPageは通常、特定のURLを検索し、検索時にインスタンス化され、ビューが生成されると破棄されます。新しいリクエストは新しいインスタンスを生成します。
ビューメモ化機能は、現在のリクエストにキャッシュを保存し、現在のコンテキストパス(またはパスがない場合はコンテキストのID)をキャッシュキーとして追加します。リクエスト中にビューがさまざまな場所で検索された場合は、インスタンスのメモ化の代わりにそれを使用できます。
from plone.memoize.view import memoize
class MyView(grok.View):
@memoize
def getExpensiveFunction(self):
# ....
ユーティリティビュー@@plone_context
などは、から最も恩恵を受けplone.memoize.view.memoize
ます。
高価なメソッドがビューコンテキストに依存しmemoize_contextless
ない場合は、デコレータを使用してください。これにより、キャッシュキーからビューコンテキストパスが省略されます。
from plone.memoize.view import memoize_contextless
class MyView(grok.View):
@memoize_contextless
def getExpensiveFunction(self):
# ....
したがって、.getExpensiveFunction()
このビューのコンテキスト(サイトルートまたはコンテンツツリーの深い場所)に関係なく同じ情報を返す場合は、_contextless
バリアントを使用して、結果のコピーを1つだけ保存します。