クライアントEmber.TEMPLATES
の にキャッシュ オブジェクトを保存/復元することは可能でしょうか?localStorage
これを実行したい理由は、最初にクライアントにプリコンパイル済みのテンプレート全体を送信するのではなく、バックエンド サーバーから「オンデマンド」でロードするためです。Ember.TEMPLATES
ここで、ユーザーがブラウザーをリロードすることを決定した場合、クライアントが既に要求されたテンプレート ファイルについてバックエンド サーバーに再度クエリを実行する必要がないように、オブジェクト全体を保存/復元したいと考えています。
次の関数を使用してテンプレートを に保存できlocalStorage
ますが、まったくきれいではない (またはパフォーマンスが最適化されていない) と思います。
saveCacheToLocalStorage: function() {
var stringifiedCache = "{ ";
for(var tmpl in Ember.TEMPLATES) {
stringifiedCache += JSON.stringify({name: tmpl, template: Ember.TEMPLATES[tmpl].toString()});
}
stringifiedCache += " }";
localStorage.setItem(this.localStorageId, stringifiedCache);
this.hasChanged = false;
return true;
}
しかし、から文字列化された値を解析しようとするlocalStorage
と、Syntax Error: Unexpected token: {
. 私の問題に対するより良い解決策はありますか?
Web アプリケーションのユーザーはさまざまな領域にアクセスし、Web アプリのさまざまな機能を使用するため、すべてのテンプレートをすべてのユーザーに提供することは受け入れられないため、最初はすべてのプリコンパイル済みテンプレートを提供することはできません。
編集
スクリプトにいくつかのエラーがあり、テンプレートを に保存/復元できるようになりましたlocalStorage
が、Web サーバーから取得したテンプレートを一時的に保存する別のキャッシュを作成して、テンプレートを に保存できるようにする必要がありましたlocalStorage
。どういうわけか、Ember.TEMPLATES
それ自体からテンプレートを取得することはできません。これは、常に同じ関数を取得しているためです。