Ember.js-是否可以在window.localStorage中存储/还原Ember.TEMPLATES?

Ember.js-是否可以在window.localStorage中存储/还原Ember.TEMPLATES?,ember.js,local-storage,handlebars.js,Ember.js,Local Storage,Handlebars.js,我想知道是否可以在客户端的localStorage中存储/恢复Ember.TEMPLATES缓存对象 我之所以要这样做,是因为我一开始并没有向客户机发送全部预编译的模板,而是从后端服务器“按需”加载它们。现在,如果用户决定重新加载浏览器,我想保存/恢复整个Ember.TEMPLATES对象,这样客户机就不需要再次查询后端服务器上已请求的模板文件 我可以使用以下功能将模板存储在localStorage中,但我想它一点也不漂亮(或性能优化): 但是如果我试图从localStorage解析字符串化值,

我想知道是否可以在客户端的
localStorage
中存储/恢复
Ember.TEMPLATES
缓存对象

我之所以要这样做,是因为我一开始并没有向客户机发送全部预编译的模板,而是从后端服务器“按需”加载它们。现在,如果用户决定重新加载浏览器,我想保存/恢复整个
Ember.TEMPLATES
对象,这样客户机就不需要再次查询后端服务器上已请求的模板文件

我可以使用以下功能将模板存储在
localStorage
中,但我想它一点也不漂亮(或性能优化):

但是如果我试图从
localStorage
解析字符串化值,它会失败,因为
语法错误:意外的标记:{
。有更好的解决方案吗

首先,我无法交付所有预编译的模板,因为web应用程序的用户访问不同的区域并使用web应用程序的不同功能,因此不能接受向每个用户提供全套模板

编辑
我的脚本中有一些错误,现在我可以在
localStorage
中存储/还原模板,但我必须创建另一个缓存,临时存储从web服务器获取的模板,以便能够将它们保存到
localStorage
。不知怎的,我无法从
Ember.TEMPLA获取模板TES本身,因为我总是得到相同的函数作为回报,这是非常无用的(一些用于弃用警告等的常规内容)。

你不能,即使语法正确,它仍然无法工作,因为模板函数是生成的,并且包含闭包(范围)信息

最好将所有模板预编译到单个
templates.js
,并使用(滥用)
localStorage
缓存整个模板脚本。(手动或使用)


请注意,
localStorage
是同步的,因此它将阻止并可能挂起大模板脚本的浏览器。

您不能,即使语法正确,它仍然无法工作,因为模板函数是生成的,并且包含闭包(作用域)信息

最好将所有模板预编译到单个
templates.js
,并使用(滥用)
localStorage
缓存整个模板脚本。(手动或使用)


请注意,
localStorage
是同步的,因此它将阻止并可能挂起大模板脚本的浏览器。

如果必须这样做,请不要缓存已编译的模板(它们是函数,不能存储在localStorage中)。您可以缓存模板本身,并在从localStorage中读取编译后的模板时重新生成它们。(请记住在需要时自行终止模板。localStorage不会自行终止。)

如果必须这样做,请不要缓存编译后的模板(它们是函数,不能存储在localStorage中)。您可以缓存模板本身,并在从localStorage中读取编译后的模板时重新生成模板。(请记住在需要时自行终止模板。localStorage不会自行终止。)

谢谢,但正如我所说的,我不能/不想一次交付所有模板,因为这会大大缩短初始加载时间……我的错是,你总是可以将单个模板编译成js并单独缓存。我的意思是,你必须缓存整个脚本文件,而不仅仅是生成的函数。啊,我明白了——也许如此aps我会想出一些办法,这样我就可以加载不同模块/路线的模板包,等等。-我真的很喜欢这个想法,非常感谢!我会接受你的回答,因为我认为我从我们的小讨论中得到了最好的想法,并结束这个主题。如果你有兴趣关注这个主题,请加入正在进行的讨论,谢谢,但是正如我所说的,我不能/不想一次交付所有模板,因为这会大大缩短初始加载时间…我的缺点是,你总是可以将单个模板编译成js并单独缓存。我的意思是你必须缓存整个脚本文件,而不仅仅是生成的函数。啊,我明白了-所以也许我会继续工作我很喜欢这个想法,非常感谢!我会接受你的回答,因为我认为我从我们的小讨论中得到了最好的想法,并结束了这个主题。如果你有兴趣关注这个主题,请加入我已经完成的正在进行的讨论他预编译了模板并在
本地存储中存储了
字符串
-是否存在任何安全问题?如果我存储了已经预编译的模板,我也可以依赖较小的
句柄。运行时
库,而不是较大的
句柄
库,这有助于最小化交付的脚本的大小。如果它在不需要引用封闭变量的情况下工作,那就很酷了。我的担心与tungd的回答中的担心是一样的,但我看到你已经解决了。:)我已经展平了预编译模板,并在
本地存储中存储了
字符串
-是否有任何安全隐患这是怎么回事?如果我存储已经预编译的模板,我也可以依赖较小的
句柄。运行时
库,而不是较大的
句柄
库,这有助于最小化已交付脚本的大小。如果它工作时不需要引用已关闭的变量,那就相当酷了。我的欧洲核子研究所在东德的回答中也有同样的担忧,但我看到你已经绕开了
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;
}