Javascript Web应用程序中的内存与速度

Wol*_*mec 9 javascript web-applications requirejs

在我以前的Web应用程序中,当用户从一个"页面"(没有页面重新加载,只是一个新的div)转换到另一个时,我只是隐藏了一个div以供以后使用,并创建了+显示了新的.当用户从地址管理返回到事件管理时,我只需要隐藏当前的div并重新显示已经使用过的div.当然,这需要记忆,但速度更快.

在我的新Web应用程序中,我使用Backbone.js,Require.js和jQuery.我的所有模块都是AMD(jquery 1.7.1,backbone.js 0.5.3-optamd3,...).

在阅读了Derick Bailey的有趣博客(http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/)后,我现在清理我的div,然后转换到一个新的"页面",并在用户返回时重新创建它.

同样,关于requirejs amd模块,我曾经有一个速度超过内存策略:我的Web应用程序导航的核心是我唯一的路由器对象.如果用户第一次选择"页面"/功能,我会为它及其所有依赖项加载amd模块(它是一个backbone.js视图对象)并使用require命令并存储此结果视图对象(及其模型对象) )以供稍后在路由器对象中的数组中使用.当用户返回时,我获取存储的视图对象并重新渲染视图.

我想我也会从这种行为切换到总是重新加载模块(从缓存),但我不确定.

为了更好的方式,我希望得到更好的理解,并想问2个问题:

  1. 我有5个AMD模块.当用户需要一个功能时,我加载并执行一个模块并获取一个backbone.js视图对象作为结果,我将其存储在路由器对象的数组中.每个AMD模块都有Backbone.js(AMD版本)作为依赖项.当用户访问了所有5个"页面"并且我的所有5个视图对象都存储在我的数组中时,我的浏览器内存中是否有5个backbone.js副本,因为每个backbone.js依赖项都是从缓存中获取并重新执行,或者有垃圾收集器删除它?
  2. 其他Web应用程序开发人员如何考虑这种速度超过内存策略?

继续今天我在stackoverflow上找到了一个类似的问题(http://stackoverflow.com/questions/7866971/how-does-amd-specifically-requirejs-handle-dependancies-across-multiple-module).答案是:"它只会被加载一次,上述两个模块都将获得相同的模块值 ......".

因此,似乎存储已经加载的+执行的amd模块的结果以供以后使用并不是那么糟糕.

沃尔夫冈

Cri*_*low 2

缓存所有内容(可能会多次使用)。(写入 Canvas/ImageData)。内存中应该只有 1 个框架副本。如果您担心还有更多,请重写它以强制所有 AMD 使用单一源 Backbone。

记忆就是速度。

如果你想要更好的速度:

  • extern 您的 js 文件以进行浏览器缓存。
  • 使用本地存储
  • 在用户处进行大部分计算
  • 最小化服务器并简化请求流程