@nikotin77

Казалось бы простой цикл, но как его правильно реализовать?

Всем привет!
Всю голову уже себе сломал, может кто подскажет.
Есть следующий код, передающий суть проблемы:

var body = "";
for(var i=0; i<=5000; i++) {
  body += "if(str==='value" + i + "') 1==1;\n";
}
body += "return str;";

var f1 = new Function("str", body);
var f2 = new Function("str", body);

console.log(f1('test1'));
console.log(f2('test2'));

// main loop
for(var i=0; i<100000; i++) {
  f1("string");
  f2("string");
  console.log(i);
}
console.log("fin!");


Мой результат работы программы:

test1
test2
1
2
3
.
.
~1971


Цель- выполнить в цикле две функции f1 и f2 100000 раз.
Да, функции большие по объему.
У меня этот цикл прерывается на примерно 2000 итерации (плюс-минус).
Почему прерывается выяснить удалось - Out of memory.
Вопрос в том как так построить код, чтобы не нарваться на OOM.
Моя версия NodeJS 5.0.0, win7, 4 Гб памяти.
  • Вопрос задан
  • 212 просмотров
Пригласить эксперта
Ответы на вопрос 1
@yeti357
setImmediate пробуйте. setImmediate положит переданную в него функцию в очередь выполнения eventloop. т.е. Каждая из этих ф-ций вызовется в один из следующих тактов, когда будет удобно. Смысл в том, что ваши 100к функций распределяться по времени и по тактам, а не будут выполняться в одном такте, намертво заблокируя весь eventloop, не позволяя вызвать любую асинхронную функцию(ответ от бд, запрос на сервер и тд).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы