Что такое объем памяти DOM JS? - PullRequest
2 голосов
/ 20 января 2011

Мне было интересно, кто-нибудь знает, каковы пределы dom, например.

Если у меня есть объект json

var json = {}

и это jsonобъект имеет свои собственные объекты внутри, включая массивы, другие объекты или простой текст события.

сколько дочерних объектов может json содержать, если есть ограничение, а также что, если объект был динамически увеличен в размереэто когда-нибудь будет отображать ошибку?потому что больше нет памяти, чтобы справиться с этим и т.д ...

Ответы [ 2 ]

6 голосов
/ 20 января 2011

Я не верю, что существуют жесткие ограничения, но мне было любопытно посмотреть, что произойдет, поэтому я написал небольшой специальный тестовый сценарий:

<!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 с оперативной памятью 2 ГБ, второй - под управлением Windows 7 с оперативной памятью 4 ГБ.

Я получил следующие результаты:

  • IE 7 :Счетчик остановился на 52, прежде чем он замерз.Браузер стал полностью безразличным.Предупреждение не отображалось.Я должен был убить процесс.
  • IE 8 : счетчик дошел до 108. Браузер перестал отвечать на запросы.Предупреждение не отображалось.Мне пришлось убить процесс.
  • Firefox 3.6 : счетчик перешел на 289 на первом компьютере и 580 на втором.В этот момент было показано предупреждение (Возможно, сценарий на этой странице занят, или он перестал отвечать. Вы можете остановить сценарий сейчас, или вы можете продолжать видеть, завершится ли сценарий.) Поскольку браузер очень не отвечал, я остановил скрипт.
  • Opera 11 : счетчик перешел на 235 на первом компьютере и на 232 на втором.Браузер был немного медленным.Предупреждение не отображалось.
  • Chrome 8 : счетчик перешел на 327 на обоих компьютерах, поэтому, похоже, достигнут жесткий предел.Браузер все еще был очень отзывчивым.Предупреждение не отображалось.
0 голосов
/ 20 января 2011

В этом случае нет ограничений в соответствии со стандартами JS, DOM или JSON.

Если есть какие-либо ограничения, они сильно зависят от реализации и должны быть проверены в документации браузера (или движка js).И единственный известный мне предел - 1,8 Гб для кучи в V8 (двигатель Chrome JS).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...