【发布时间】:2014-10-22 16:41:43
【问题描述】:
在一个用 Cordova 制作的相当大的应用程序中,我们不断地从用户的 LocalStorage 中获取一组变量。我的意思是,这个集合相当大(可以从一些 kbytes 到相当 10mb)。我很确定将变量加载到内存中可能不是一个好主意(尤其是在低功耗、低内存设备中),但事实证明从 LocalStorage 中获取它们似乎花费了太长时间。此刻,我们的做法是这样的:
function doSomething() {
var ourData = JSON.parse(localStorage.getItem('ourData'));
ourData = processingBackAndForth(ourData);
localStorage.setItem('ourData', JSON.stringify(ourData));
syncWithServer(ourData);
}
processingBackAndForth(ourData) 非常密集,整个函数几乎每 10 秒使用一次。现在,我在想,这应该更快吗?
ourData = JSON.parse(localStorage.getItem('ourData'));
function doSomething() {
ourData = processingBackAndForth(ourData);
localStorage.setItem('ourData', JSON.stringify(ourData));
syncWithServer(ourData);
}
看了一点on this之后,嗯,它基本上告诉我们最好将它们保持在本地范围内(我知道这对封装更好),但是这个过程是不是有点太多了?想象一下,从 LocalStorage 中检索,再次保存,然后让 GC 清理变量,之后将再次使用它。
我知道声明链接的要点之一是,如果需要在整个应用程序中使用某些东西,并且仅在非常特殊的情况下,那么将其设为全局,但无论如何,例如在服务器和 LocalStorage 之间保持同步版本还是很关心我,所以实际上我只是减轻了检索和垃圾收集的重量。
JavaScript 代码是否会使用大的全局变量而不是大的局部变量来获得一些微优化?
【问题讨论】:
-
听起来您要么需要将数据分成更小的块,要么使用数据库。
-
本地 sqlite 数据库是更好的选择
-
数据实际上是不稳定的,因为它只会持续到应用程序关闭。之后我仍然需要从头开始刷新它。我设法通过将 LocalStorage 的访问减少一半并尽可能多地存储解析的数据来解决这个问题(仅在需要时对其进行字符串化,因为它是一个主要瓶颈)。不过感谢您的帮助!
标签: javascript cordova optimization global-variables local-storage