Google AppEngine用のアプリケーションを作成しました。memcache APIを使用して、リクエストごとのCPU時間を削減したいと考えています。私はアプリケーションをプロファイリングして、CPU時間の大きな部分がテンプレートレンダリングとAPI呼び出しをデータストアに持っていることを発見しました。同僚とチャットした後、(おそらく少し早いですが)キャッシングページのレンダリングされたHTMLのチャンクは、リクエストあたりのCPU時間を大幅に削減します。キャッシングのパターンはかなりきれいですが、の質問は、キャッシングと追い出しのこのロジックを置くためにはは私には謎のビットです。AppEngineアプリケーションにキャッシュを呼び出すロジックを配置する最適な場所はどこですか?
たとえば、アプリケーションのメインページにアナウンスセクションがあるとします。このセクションでは、後に再レンダリングする必要があります:
- 最初のアカウントで、誰のための読み取り、
- 追加された新しい発表、および
- 古い発表は
一部を削除されますevict_announcements_section_from_cache()
メソッドコールを配置する場所のオプション:
- アナウンスモデルの
.delete()
、および.put()
メソッド - RequestHandlerの
.post()
メソッド - 他のすべての場所?
は、その後のRequestHandlerのgetページでは、私は潜在的に標準memcacheのパターンを(ミス、戻り値にキャッシュするために追加し、キャッシュをチェック)に従うとのそのチャンクのためにダウンしたテンプレートにそのHTMLを渡すことになるget_announcements_section()
を呼び出すことができますページ。
モデル、またはController/RequestHandlerなどのキャッシュに記憶されたロジックを配置するのが一般的な設計パターンですか?理想的には、コードのいたるところで触手を使って論理を取り除くことを避けたいと思います。