【问题标题】:Memory versus Speed in Javascript Web ApplicationsJavascript Web 应用程序中的内存与速度
【发布时间】: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个问题:

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

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

所以看起来存储已经加载+执行的amd模块的结果以备后用似乎还不错。

沃尔夫冈

【问题讨论】:

    标签: javascript web-applications requirejs


    【解决方案1】:

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

    内存速度。

    如果你想要更快的速度:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 2012-12-30
      相关资源
      最近更新 更多