JavaScript для нахождения памяти доступной

Давайте заставим его сразу очиститься: это не вопрос об утечке памяти! У меня есть страница, которая позволяет пользователю вводить некоторые данные и 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.

Моя идея состояла бы в том, чтобы выполнить функцию прежде, чем выполнить вычисление для разработки вперед, если браузер успешно выполнится. Но сделать так, универсальным способом, я думаю, что должен найти память доступной моему браузеру.

Любое предложение приветствуется.

8
задан Zo72 11 March 2016 в 17:30
поделиться

3 ответа

Javascript (в браузере) запускается в песочнице, что означает, что он изолирован от доступа к вещам, которые могут вызвать безопасность такие проблемы, как локальные файлы, системные ресурсы и т. д. - так что нет, вы не можете обнаружить использование памяти.

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

5
ответ дан 5 December 2019 в 19:00
поделиться

Подозреваю, что проблема в задержке тайм-аута 0 - он пытается мгновенно повторить попытку. Попробуйте увеличить это.

0
ответ дан 5 December 2019 в 19:00
поделиться

Цикл будет использовать меньше памяти, чем рекурсия.

   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);
1
ответ дан 5 December 2019 в 19:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: