【发布时间】:2012-01-12 10:32:26
【问题描述】:
在我以前的 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 模块,我曾经有一个速度超过内存的策略:我的网络应用导航的核心是我唯一的路由器对象。如果用户第一次选择“页面”/功能,我会使用 require 命令为其加载 amd 模块(它是一个主干.js 视图对象)及其所有依赖项,并存储这个结果视图对象(及其模型对象) ) 供以后在路由器对象的数组中使用。当用户回来时,我获取存储的视图对象并重新渲染视图。
我想我也会从这种行为切换到总是重新加载模块(从缓存),但我不确定。
为了走最好的路,我想更好地了解并想问2个问题:
- 我有 5 个 AMD 模块。当用户需要一个特性时,我加载并执行一个模块并得到一个backbone.js 视图对象,我将它存储在我的路由器对象的一个数组中。每个 AMD 模块都有 Backbone.js(AMD 版本)作为依赖项。当用户访问了所有 5 个“页面”并且我的所有 5 个视图对象都存储在我的数组中时,我的浏览器内存中是否有 5 个主干.js 副本,因为每个主干.js 依赖项都是从缓存中获取并重新执行,或者垃圾收集器是否已将其删除?
- 其他 Web 应用程序开发人员如何看待这种速度超过内存的策略?
续 今天我在stackoverflow上发现了一个类似的问题(http://stackoverflow.com/questions/7866971/how-does-amd-specifically-requirejs-handle-dependancies-across-multiple-module)。 答案是:“它只会被加载一次,以上两个模块将获得相同的模块值 ...”。
所以看起来存储已经加载+执行的amd模块的结果以备后用似乎还不错。
沃尔夫冈
【问题讨论】:
标签: javascript web-applications requirejs