1

クライアント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それ自体からテンプレートを取得することはできません。これは、常に同じ関数を取得しているためです。

4

2 に答える 2

1

テンプレート関数が生成され、クロージャー (スコープ) 情報が含まれているため、構文が正しい場合でも機能しません。

最善の策は、すべてのテンプレートを 1 つにプリコンパイルし、templates.js(悪用)localStorageを使用してテンプレート スクリプト全体をキャッシュすることです。(手動、またはhttp://addyosmani.github.io/basket.js/を使用)

localStorageこれは同期であるため、大きなテンプレート スクリプトを使用するとブロックされ、ブラウザがハングする可能性があることに注意してください。

于 2013-06-17T13:53:23.427 に答える