Асинхронная модель. События 
		
		
		
		Всем привет, ребята!  
	Разрабатывая искусственный интеллект для зомби в моей игре столкнулся с проблемой. А именно достаточно ресурсоемкий расчет траектории движения зомби:( который просчитывается циклом for. Как я понял я не учел того факта, что при выполнении цикла for, сервер будет "стоять" до полного выполнения цикла. Почитав статьи я понял, что необходимо использовать асинхронную модель программирования основанную на событиях. Сейчас пытаюсь понять, как правильно организовать данный модуль. То есть как я понимаю - создаем функцию, в которую передаем уникальный идентификатор, условие, функцию. Я для теста написал следующий код: 
Event = {
    start: function(ID, IF, FUNCTION, CALLBACK, INDEX) {
        var i = !INDEX ? 0 : INDEX;
        FUNCTION(i);
        if (eval(IF)) {
            i++;
            setTimeout(function() {
                Event.start(ID, IF, FUNCTION, CALLBACK, i);
            }, 1);
        }
    }
}
Event.start('fuck1', 'i < 1000', function(i) {
    console.log('test ' + i);
});
Начав выполнять данную функцию без "setTimeout", скрипт висел так же как и при выполнении for. Добавил setTimeout, и функции в скрипте стали выполняться параллельно) Но при этом заметно дольше, чем for. Меня интересует вопрос, правильно ли я понимаю логику асинхронной работы? Возможно ли как то ускорить процесс? Может быть есть какие то ню-ансы, которые необходимо учесть) Буду очень рад любым мыслям и советам! Заранее спасибо!  | 
	
		
 Отдавайте данные на обработку серверу или используйте Web Workers 
	http://habrahabr.ru/post/132785/  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 setTimeout(); setInterval(); Цитата: 
	
 И помнить, что таймауты вещь ооочень относительная. :) При увеличении нагрузки на клиента они только возрастают. Т.е. твоя 1 - чистая фикция. Браузер будет запускать "потоки" когда сочтет это возможным...  | 
	
		
 для начала убрать eval  
	![]()  | 
	
		
 ksa, спасибо! 
	melky, спасибо за совет! Просто мне показалось, что обработка evel'oм данной строки не будет так ресурсоемко, ибо мы не выполняем большую функцию, а всего лишь до 10 символов. Или я не прав?  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 Часть АПИ зависит от окружения, так например в ноде ещё больше этот список. Dorian_bs, используй WebWorkers - для твоих вычислений будет создан отдельный поток, который не будет лочить вкладку. Вот есть сахарная обёртка над воркерами https://github.com/padolsey/operative  | 
	
		
 ksa, ой, как тут с этим строго))) Буду знать)) 
	kobezzza, огромное спасибо!! То есть как я понял, operative - это скрипт, который выступает как модулем в node.js, так и просто скриптом для браузеров, который служит для работы с WebWorkers и он позволяет делать циклические вычисления, при этом не заставляя систему висеть?) Я правильно понял?)  | 
	
		
 Цитата: 
	
 В Node.js для разгрузки циклов юзай nextTick и setImmediate.  | 
| Часовой пояс GMT +3, время: 14:05. |