javascript - 什么是 DOM js 内存容量?

标签 javascript json memory-management

我想知道是否有人知道 dom 的限制是什么。

如果我有一个 json 对象

var json = {}

这个 json 对象内部有自己的对象,包括数组、其他对象或事件纯文本。

如果存在限制,json 可以容纳多少个子对象,如果对象的大小动态增加,会显示错误吗?因为没有更多的内存来处理它等等...

最佳答案

我不相信存在硬性限制,但我很好奇会发生什么,所以我编写了一个临时测试脚本:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <script language="javascript">
            window.onload = function() {
                var data = [];
                var i = 0;

                var addData = function() {
                    var arr = [];
                    i++;

                    for(var j=0; j<10000; j++) {
                        arr.push({
                            id: i + j,
                            name: "item" + j,
                            number: i * j,
                            date: new Date(),
                            email: "long_email" + i + "@domain" + j + ".com"
                        });
                    }

                    data.push(arr);
                    document.getElementById("result").innerHTML = i.toString();
                    window.setTimeout(addData, 1);
                };

                addData();
            };
        </script>
    </head>
    <body>
        <div id="result"></div>
    </body>
</html>

该脚本构建了一个巨大的数组。在每次迭代中,都会创建一个包含 10,000 个对象的较小数组,并将其推送到主数组。每个对象包含 5 个成员:2 个数字、2 个字符串和 1 个日期。我计算迭代次数。

我在两台计算机上测试了这个脚本,除了 IE7 和 IE8,我只有一台计算机可用。第一台计算机运行 Windows XP,配备 2GB 内存,第二台计算机运行 Windows 7,配备 4GB 内存。

我得到了以下结果:

  • IE 7:计数器在卡住之前停在 52。浏览器变得完全没有响应。没有显示任何警告。我不得不终止该进程。
  • IE 8:计数器达到 108。浏览器完全没有响应。没有显示任何警告。我不得不终止该进程。
  • Firefox 3.6:第一台计算机上的计数器为 289,第二台计算机上的计数器为 580。此时出现警告(此页面上的脚本可能正忙,或者可能已停止响应。您可以立即停止该脚本,或者可以继续查看脚本是否会完成。) 由于浏览器 react 非常迟钝,我停止了脚本。
  • Opera 11:第一台计算机上的计数器为 235,第二台计算机上的计数器为 232。浏览器有点滞后。没有显示任何警告。
  • Chrome 8:两台计算机上的计数器均变为 327,因此看起来已达到硬限制。浏览器的 react 仍然非常灵敏。没有显示任何警告。

关于javascript - 什么是 DOM js 内存容量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742954/

相关文章:

javascript - 禁用文本区域和输入中的快捷方式

javascript - 使用 js 到 file() 对象的图像 url

javascript - 将 html 元素插入文本字符串以匹配另一个 html 字符串

c# - 如何将 JSON 映射到 C# 对象

iPhone 开发 : pointer being freed was not allocated

c++ - 分配大小无效(在派生类复制构造函数中)

linux - 您如何有效地检查地址的 VM 映射?

javascript - Cheerio,如何将其提取为json?

json - 使用 Go 解码 JSON

javascript - 页面导航到 localhost :3000/? 在输入框中输入按下