我越来越多地使用JavaScript / jQuery进行高级应用程序开发。我一直在努力学习有关JavaScript语言的更多信息,并深入研究一些更高级的功能。当我阅读本文的这一部分时,我正在阅读memory leaks上的一篇文章。
JavaScript 是一种垃圾收集语言,这意味着内存在创建时分配给对象,并在没有更多引用时由浏览器回收。虽然JavaScript的垃圾收集机制没有任何问题,但它与某些浏览器处理DOM对象的内存分配和恢复的方式不一致。
这让我想到了我的一些编码习惯。一段时间以来,我一直非常专注于最小化我发送到服务器的请求数量,我觉得这只是一个很好的做法。但我想知道有时候我不会走得太远。我非常不了解任何类型的JavaScript语言带来的效率问题/瓶颈。
我最近为拖车公司建立了一个重要的管理应用程序。我使用了jQuery UI对话框小部件,并使用特定的故障单数据填充了数据网格。现在,这听起来很简单......但是他们在这里传递了大量数据。
(现在问题...... drumroll 请...)
我想知道以下每个选项的优点/缺点是什么。
1)仅为给定的故障单生成一个请求,并将其永久存储在DOM
中。只需显示/隐藏模态窗口,这意味着每张票只发出一个请求。
2)每次打开故障单时发出请求,并在故障单关闭时将其销毁。
我的自然倾向是将票据存储在DOM
中 - 但是我担心如果应用程序长时间没有被重置(这将会是重置的话),这将最终开始占用大量内存)。
我真的只是在寻找这两种选择的优缺点(或者我甚至没有听说过的东西= P)。
答案 0 :(得分:4)
此处的解决方案取决于您的问题的具体细节,因为“正确”的答案将根据页面打开的时间长度,DOM元素的大小和请求延迟而变化。以下是一些需要考虑的事项:
任何缓存策略都需要考虑何时使缓存无效并重新请求更新的数据。根据您的策略,您需要处理多个编辑器产生的冲突。
最好的方法是开始使用最简单的方法,并增加复杂性,以便仅在必要时提高速度。
答案 1 :(得分:2)
第三条路径是在JS中存储与故障单关联的数据,并在召唤/解除模式窗口时创建和销毁DOM节点(jQuery模板在这里可能是一个自然的解决方案。)
也就是说,避免网络流量的主要原因似乎是用户体验(网络总是慢于RAM)。但是,如果用户直觉涉及加载数据,那么每次发出请求实际上可能不会降低这种体验。
答案 2 :(得分:0)
我想说2号是最好的。因为如果在打开票证后票证发生变化,这种方式会在第二次打开票证时显示。
答案 3 :(得分:0)
DOM操作触发的重绘/重排数量的一个重要因素。建立内容更改并一次性插入它们比增量更有效,因为每次增量都会导致重绘/重排。
请参阅:http://www.youtube.com/watch?v=AKZ2fj8155I以便更好地理解这一点。