保存或销毁数据/ DOM元素?哪个需要更多资源?

时间:2010-12-01 22:30:46

标签: javascript performance application-structure

我越来越多地使用JavaScript / jQuery进行高级应用程序开发。我一直在努力学习有关JavaScript语言的更多信息,并深入研究一些更高级的功能。当我阅读本文的这一部分时,我正在阅读memory leaks上的一篇文章。

  

JavaScript 是一种垃圾收集语言,这意味着内存在创建时分配给对象,并在没有更多引用时由浏览器回收。虽然JavaScript的垃圾收集机制没有任何问题,但它与某些浏览器处理DOM对象的内存分配和恢复的方式不一致。

这让我想到了我的一些编码习惯。一段时间以来,我一直非常专注于最小化我发送到服务器的请求数量,我觉得这只是一个很好的做法。但我想知道有时候我不会走得太远。我非常不了解任何类型的JavaScript语言带来的效率问题/瓶颈。

实施例

我最近为拖车公司建立了一个重要的管理应用程序。我使用了jQuery UI对话框小部件,并使用特定的故障单数据填充了数据网格。现在,这听起来很简单......但是他们在这里传递了大量数据。

(现在问题...... drumroll 请...)

我想知道以下每个选项的优点/缺点是什么。

1)仅为给定的故障单生成一个请求,并将其永久存储在DOM中。只需显示/隐藏模态窗口,这意味着每张票只发出一个请求。

2)每次打开故障单时发出请求,并在故障单关闭时将其销毁。


我的自然倾向是将票据存储在DOM中 - 但是我担心如果应用程序长时间没有被重置(这将会是重置的话),这将最终开始占用大量内存)。

我真的只是在寻找这两种选择的优缺点(或者我甚至没有听说过的东西= P)。

4 个答案:

答案 0 :(得分:4)

此处的解决方案取决于您的问题的具体细节,因为“正确”的答案将根据页面打开的时间长度,DOM元素的大小和请求延迟而变化。以下是一些需要考虑的事项:

  • 仅在缓存中保留最新的 n 项。如果您只是在短时间内重新显示项目,这种方法很有效。
  • 为每个元素而不是DOM元素存储数据,并在每个显示器上重建DOM。
  • 使用HTML5存储来存储数据而不是DOM或变量存储。这具有额外的优势,即可以跨页面请求存储数据。

任何缓存策略都需要考虑何时使缓存无效并重新请求更新的数据。根据您的策略,您需要处理多个编辑器产生的冲突。

最好的方法是开始使用最简单的方法,并增加复杂性,以便仅在必要时提高速度。

答案 1 :(得分:2)

第三条路径是在JS中存储与故障单关联的数据,并在召唤/解除模式窗口时创建和销毁DOM节点(jQuery模板在这里可能是一个自然的解决方案。)

也就是说,避免网络流量的主要原因似乎是用户体验(网络总是慢于RAM)。但是,如果用户直觉涉及加载数据,那么每次发出请求实际上可能不会降低这种体验。

答案 2 :(得分:0)

我想说2号是最好的。因为如果在打开票证后票证发生变化,这种方式会在第二次打开票证时显示。

答案 3 :(得分:0)

DOM操作触发的重绘/重排数量的一个重要因素。建立内容更改并一次性插入它们比增量更有效,因为每次增量都会导致重绘/重排。

请参阅:http://www.youtube.com/watch?v=AKZ2fj8155I以便更好地理解这一点。