Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.12.2015, 09:57
Новичок на форуме
Отправить личное сообщение для nikotin Посмотреть профиль Найти все сообщения от nikotin
 
Регистрация: 08.12.2015
Сообщений: 6

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

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



Почему цикл main loop не отрабатывает до конца и программа завершает работу (при этом никакой информации об ошибках не выводится)? Запускать в nodejs.

Пожалуйста, не пишите комментарии относительно функциональности кода, проблема не в этом. Цель- выполнить в цикле две функции f1 и f2 100000 раз. У меня этот цикл прерывается на примерно 2000 итерации (плюс-минус). Почему прерывается - вот в чем вопрос первый вопрос и как этого избежать - второй. При этом интересная особенность- одна функция в цикле исполняется исправно 100000 раз. Я пробовал запускать этот код на разных машинах, результат примерно одинаковый.
Ответить с цитированием
  #2 (permalink)  
Старый 08.12.2015, 15:12
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Небось, прерывается из-за перерасхода ресурсов. Мой комп от этого кода просто завис.

Цитата:
как этого избежать
Оптимизировать, очевидно.
Ответить с цитированием
  #3 (permalink)  
Старый 08.12.2015, 15:49
Новичок на форуме
Отправить личное сообщение для nikotin Посмотреть профиль Найти все сообщения от nikotin
 
Регистрация: 08.12.2015
Сообщений: 6

Сообщение от Erolast Посмотреть сообщение
Небось, прерывается из-за перерасхода ресурсов. Мой комп от этого кода просто завис.


Оптимизировать, очевидно.
Да, overflow of memory.

Предполагаю, что нужно как-то иначе вызывать функции, но как?
Знаний не хватает, поэтому и спрашиваю.
Ответить с цитированием
  #4 (permalink)  
Старый 09.12.2015, 02:04
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Приведенный код проблемы не воспроизводит что в ноде работает что в обкладчике браузера

не указана система и версия ноды
Ответить с цитированием
  #5 (permalink)  
Старый 09.12.2015, 04:32
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

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

f1 = Function("str", body);
f2 = 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!");

этот код отрабатывает, но долго
99999
fin!

Process finished with exit code 0
Ответить с цитированием
  #6 (permalink)  
Старый 09.12.2015, 11:21
Новичок на форуме
Отправить личное сообщение для nikotin Посмотреть профиль Найти все сообщения от nikotin
 
Регистрация: 08.12.2015
Сообщений: 6

Win7, памяти 4 Гб, nodejs 5.0.0
Ответить с цитированием
  #7 (permalink)  
Старый 09.12.2015, 11:22
Новичок на форуме
Отправить личное сообщение для nikotin Посмотреть профиль Найти все сообщения от nikotin
 
Регистрация: 08.12.2015
Сообщений: 6

Сообщение от MallSerg Посмотреть сообщение
Приведенный код проблемы не воспроизводит что в ноде работает что в обкладчике браузера

не указана система и версия ноды
Win7, памяти 4 Гб, nodejs 5.0.0
Ответить с цитированием
  #8 (permalink)  
Старый 09.12.2015, 11:23
Новичок на форуме
Отправить личное сообщение для nikotin Посмотреть профиль Найти все сообщения от nikotin
 
Регистрация: 08.12.2015
Сообщений: 6

Сообщение от Poznakomlus Посмотреть сообщение
этот код отрабатывает, но долго
99999
fin!

Process finished with exit code 0
Можно узнать характеристики вашей машины?
Ответить с цитированием
  #9 (permalink)  
Старый 09.12.2015, 12:11
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

32 двух разрядные версии node падают т.к. скрипт использует слишком много оперативной памяти.

Не используй циклы(1000000) в которых на каждой итерации используешь блоки кода в 5000 строк по нескольку раз.
Ну или делай разрывы в исполнении чтобы сборщик мусора имел шанс прибраться.
Ответить с цитированием
  #10 (permalink)  
Старый 09.12.2015, 12:24
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от nikotin
Можно узнать характеристики вашей машины
Win10, памяти 8 Гб, nodejs 5.2.0
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Firefox плюет на alert и продолжает выполнение. Почему? nsk_1945 AJAX и COMET 3 04.03.2013 19:53
Почему выполнение инструкции "}!{" в консоли браузера возвращает false? vesel4ak Общие вопросы Javascript 11 14.08.2012 17:10
Почему некоторые операторы возвращают значения, а не ссылки? dump Общие вопросы Javascript 15 25.07.2012 17:28
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
Prototype. Одноблочное определение псевдокласса. Литеральная форма не робит. Почему? GuardCat Общие вопросы Javascript 6 03.10.2011 13:46