Давайте заставим его сразу очиститься: это не вопрос об утечке памяти! У меня есть страница, которая позволяет пользователю вводить некоторые данные и JavaScript, чтобы обработать эти данные и привести к результату. JavaScript производит возрастающие выводы на DIV, чем-то вроде этого:
(function()
{
var newdiv = document.createElement("div");
newdiv.innerHTML = produceAnswer();
result.appendChild(newdiv);
if (done) {
return;
} else {
setTimeout(arguments.callee, 0);
}
})();
При определенных обстоятельствах вычисление произведет так много данных, что IE8 перестанет работать с этим сообщением:
недостаточно устройства хранения данных при контакте со слишком большим количеством данных
Вопрос: есть ли способ, которым я могу удаться, сколько данных является слишком большим количеством данных?
поскольку я сказал, что нет никакой ошибки для решения. Это - подлинное из памяти, потому что вычисление требует для создания слишком многих элементов HTML.
Моя идея состояла бы в том, чтобы выполнить функцию прежде, чем выполнить вычисление для разработки вперед, если браузер успешно выполнится. Но сделать так, универсальным способом, я думаю, что должен найти память доступной моему браузеру.
Любое предложение приветствуется.
Javascript (в браузере) запускается в песочнице, что означает, что он изолирован от доступа к вещам, которые могут вызвать безопасность такие проблемы, как локальные файлы, системные ресурсы и т. д. - так что нет, вы не можете обнаружить использование памяти.
Как утверждается в других ответах, вы можете упростить задачу для браузера, делая паузу между реализациями или используя менее ресурсоемкий код, но у каждого браузера есть свои ограничения.
Подозреваю, что проблема в задержке тайм-аута 0 - он пытается мгновенно повторить попытку. Попробуйте увеличить это.
Цикл будет использовать меньше памяти, чем рекурсия.
do
{
var newdiv = document.createElement("div");
newdiv.innerHTML = produceAnswer();
result.appendChild(newdiv);
} while (!done);
Вы также можете установить верхний предел количества полученных ответов.
var answerCount = 0;
do
{
var newdiv = document.createElement("div");
newdiv.innerHTML = produceAnswer();
result.appendChild(newdiv);
} while (!done && answerCount++ < 1000);