什么是DOM js内存容量?

Val*_*Val 2 javascript json memory-management

我想知道有没有人知道dom的限制是什么.

如果我有一个json对象

var json = {}

并且此json对象内部有自己的对象,包括数组,其他对象或事件纯文本.

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

Eli*_*ing 6

我不相信有严格的限制,但我很想知道会发生什么,所以我写了一个小的临时测试脚本:

<!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>
Run Code Online (Sandbox Code Playgroud)

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

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

我得到了以下结果:

  • IE 7:计数器在它冻结之前停在52.浏览器变得完全没有响应.没有显示任何警告.我不得不杀了这个过程.
  • IE 8:计数器最远为108.浏览器完全没有响应.没有显示任何警告.我不得不杀了这个过程.
  • Firefox 3.6:计数器在第一台计算机上达到289,在第二台计算机上达到580.这时显示出一个警告(本页上的脚本可能忙,或者它可能已停止响应.现在你可以停止脚本,也可以继续看看此脚本将完成.)由于浏览器是奇慢无比,我停止了剧本.
  • Opera 11:计数器在第一台计算机上升至235,在第二台计算机上升至232.浏览器有点滞后.没有显示任何警告.
  • Chrome 8:两台计算机上的计数器都达到了327,因此看起来达到了硬限制.浏览器仍然非常敏感.没有显示任何警告.