Javascript-脚本内存与DOM存储
Javascript - Script Memory vs DOM Storage
我正在编写一个为用户求解方程的代码。用户将能够输入矩阵、向量等。现在,当我求解这些方程时,我将解写到一个表中,每一行代表任何给定的变量或方程。在计算过程中用于保存公式的javascript对象将被销毁。我这样做是为了防止大量数据存储在内存中,并可能降低脚本的速度。当以后需要数组时,会从相应的表行将其读取到对象中。
我想知道像这样在DOM中保存内存与在内存中的对象中保存内存相比如何。通过将这些东西作为对象而不是在DOM上保存在内存中,我更容易降低代码执行速度?此外,由于这些对象需要由代码的多个部分访问,因此这些对象必须是全局对象。正确的
总之,没有
web开发中有一条规则是不变的:DOM很慢。
在浏览器JS中,选择、访问和迭代DOM元素以及读取和修改它们的属性是最慢的事情之一。另一方面,使用原生JS对象的速度非常快。通常,我会尽量避免使用DOM。
您做出了(错误的)假设,认为低内存使用率在某种程度上等同于性能的提高。事实上,通常情况下1(而不仅仅是在浏览器中),内存使用量的增加会提高应用程序的性能。通过将计算结果缓存在内存中的特性,可以避免以后重新生成数据时占用处理器和时间。当然,您必须在内存使用和性能需求之间取得平衡。
在你的情况下,我肯定会把等式对象记在记忆中。它可能使用了惊人的少量内存。例如,我刚刚在Chrome中创建了一个由1000个整数组成的数组,内存探查器告诉我它使用了不到40kB–几乎所有这些都是头顶上的物体。这些值本身只需要4 kB–1000*4字节(32位)。
当您考虑到读取DOM以重新生成对象的例程可能需要数十到数百毫秒(或者更糟,取决于复杂性)才能运行时,为什么不只生成一次对象并保留它,尤其是因为成本如此之低?
然而,与所有性能问题一样,真正的答案是您必须对应用程序进行概要分析,以了解性能瓶颈的真正所在。使用Chrome的开发人员工具的配置文件选项卡,在使用应用程序时获取CPU配置文件(衡量处理器随时间的利用率)和堆快照(衡量即时内存使用率)。
1-这实际上取决于你的程序是否使用了太多的内存,以至于页面必须被交换掉。在16GB RAM已经司空见惯的台式机上,你几乎没有什么可担心的。然而,在资源更加紧张的移动设备上观察内存使用情况仍然很重要
我想知道像这样在DOM中保存内存与在内存中的对象中保存内存相比如何。
测试一下,我预计DOM会使用更多的内存,访问速度会慢得多。无论如何,除非你存储了大量的东西,否则对内存的影响可能是最小的。
通过将这些东西作为对象而不是在DOM上保存在内存中,我更容易降低代码执行速度?
我想恰恰相反。访问DOM的速度会慢很多。
此外,由于这些对象需要由代码的多个部分访问,因此这些对象必须是全局对象。正确的
错了。可以在闭包中保留引用,也可以将所有对象放入单个数组或对象中。在任何情况下,全局对象本身都不错,它们只是被认为是不整洁的,并增加了名称冲突的机会。
- 如何存储DOM节点
- 性能问题:存储对DOM元素的引用与使用选择器相比
- 如何在 javascript 中存储 dom 元素的变量
- 我可以在Javascript的DOM节点中存储非文本属性吗?
- 什么可以存储在 DOM 存储中
- 尝试访问本地存储时 javascript/html5 中的 dom 异常 18
- 在DOM中存储全局变量的javascript
- 将来自dom元素的事件侦听器存储在JavaScript中
- 如何在jQuery中将DOM元素说明符存储为JS变量
- 单击时将html存储到变量中,从DOM中删除,然后在另一次单击时将其放回
- 用于存储/检索Backbone.js的模式查看与dom元素关联的实例
- 用于在客户端上存储html字符串以供以后插入DOM
- 在http和https之间共享dom存储
- 将自定义数据存储在dom元素中
- 是否可以以某种方式将JSON对象直接存储到DOM中
- 将 DOM 元素内容存储在变量中,并用它更新相同的 DOM 元素
- 使用存储在变量中的选择器访问DOM元素
- window.sessionStorage.getItem('anyItem')容易受到客户端DOM存储
- 是否认为仅从DOM存储和检索信息是不好的做法?
- Javascript-脚本内存与DOM存储