Javascript-脚本内存与DOM存储

Javascript - Script Memory vs DOM Storage

本文关键字:DOM 存储 内存 脚本 Javascript-      更新时间:2023-09-26

我正在编写一个为用户求解方程的代码。用户将能够输入矩阵、向量等。现在,当我求解这些方程时,我将解写到一个表中,每一行代表任何给定的变量或方程。在计算过程中用于保存公式的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的速度会慢很多。

此外,由于这些对象需要由代码的多个部分访问,因此这些对象必须是全局对象。正确的

错了。可以在闭包中保留引用,也可以将所有对象放入单个数组或对象中。在任何情况下,全局对象本身都不错,它们只是被认为是不整洁的,并增加了名称冲突的机会。