2010-04-22 5 views
4

Я создаю очень большой объект JavaScript при загрузке страницы. Я не получаю ошибки в firefox, но в Internet Explorer. Я получаю сообщение об ошибке:Мой JavaScript Объект слишком большой

Остановить запуск этого скрипта? Сценарий на этой странице заставляет веб-браузер работать медленно. Если он продолжает работать, ваш компьютер может перестать отвечать на запросы.

Есть ли ограничение по размеру для объектов Javascript в Internet Explorer? Любые другие решения, но не деление объекта?

+0

Значительная часть этого будет зависеть от управления памятью браузеров и объема памяти, доступной на ПК пользователя. Что это за объект? Почему это так важно в первую очередь? Вам действительно нужны все его данные во время выполнения? Что он содержит? –

+0

Duplicate http://stackoverflow.com/questions/2692623/my-javascript-object-is-too-big – Germ

+0

@ Куби, пожалуйста, удалите один из повторяющихся вопросов, я полагаю, вы создали их по ошибке, поскольку они кажутся одинаковыми? –

ответ

3

Ключ к сообщению, получаемый вами, является частью «бежать медленно», которая относится к времени. Итак, ваша проблема - это не размер объекта, а время, затраченное на создание объекта.

Чтобы еще глубже доработать, проблема заключается не в времени, затрачиваемом на создание объекта. Скорее, IE подсчитывает количество выполняемых им javascript-операторов, сбрасывая этот счет, когда он выполняет обработчик события или функцию setTimeout.

Таким образом, вы можете предотвратить эту проблему, разделив код на несколько частей, которые запускаются внутри вызовов в setTimeout (...);

Вот пример, который может подтолкнуть вас в правильном направлении:

var finish = function(data) { 
    // Do something with the data after it's been created 
}; 

var data = []; 
var index = 0; 

var loop; 
loop = function() { 
    if (++index < 1000000) { 
    data[index] = index; 
    setTimeout(loop, 0); 
    } else { 
    setTimeout(function(){ finish(data); }, 0); 
    } 
} 

setTimeout(loop, 0); 
+0

Можете ли вы проверить мой код? – Kubi

+0

@ Куби: ваш код должен конвертировать довольно легко. Если вам нужна помощь, попробовав немного, опубликуйте ее здесь на SO и посмотрите, что вы получаете. –

+0

Думаю, я не мог понять. Я попытался поместить setTimeout перед allPlans.push, если allPlans.length больше 1000. – Kubi

2

Это не из-за размера, а из-за большого количества циклов, которые вы выполняете, и большого времени выполнения. если вы разрезаете его на мелкие части, он должен работать нормально.

Попробуйте снизить сложность функций при работе. Можете ли вы опубликовать его, чтобы мы могли посмотреть на петли и попытаться помочь?

Edit:

Я supose вы хотите сделать все, что на стороне клиента по какой-то причине. Кажется, что код требует большого выполнения для запуска на стороне клиента.

Не можете ли вы выполнить вычисления на стороне сервера? Если это все, чтобы инициализировать объект, вы можете кэшировать его, чтобы избежать повторной обработки и просто отправить сгенерированный json на сторону javascript.

Похоже кэшируемо

+0

Мне жаль, что это слишком сложно, чтобы опубликовать его здесь. Но в основном это массив объектов, включающий 700 объектов. Эти объекты включают 4 свойства, один из которых включает до 6 других свойств. – Kubi

+0

я его опубликовал :) – Kubi

+0

нет, мы не хотим делать это на сервере! Созданный json становится около 10 мб. – Kubi

2

Вы должны использовать большую петлю или некоторую рекурсивную логику в коде. Он действительно не зависит от размера объекта - он зависит от ресурсов процессора, которые он использует (память, процессор и т. Д.).

2

ресурсы, доступные для JavaScript ограничены ресурсы на клиентском компьютере.

Кажется, что ваш скрипт использует слишком много времени обработки при создании этого объекта, а механизм «стоп-сценарий» используется для сохранения вашего браузера от зависания.

Причина, по которой это происходит в Internet Explorer, а не в Firefox, вероятно, потому, что механизм JavaScript в Firefox более эффективен, поэтому он не превышает пороговое значение для запуска сценария остановки.

Смежные вопросы