Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   setInterval vs for Что лучше?:) (https://javascript.ru/forum/misc/42481-setinterval-vs-chto-luchshe.html)

Dorian_bs 28.10.2013 18:57

setInterval vs for Что лучше?:)
 
Создаю сервер для онлайн игры.
Встал вопрос, как лучше оптимизировать работу.

Например на сервере есть 1000 игроков. Каждые 0.2 сек нужно каждому отправить данные.

Что лучше?
- Создать 1000-чу setInterval(..., 200) для каждого игрока и выполнять в каждом необходимые функции.
- Создать 1 for(obj in array) обходящий 1000 элементов в 1 setInterval(..., 200).

Буду очень рад услышать Ваши мысли по этому поводу.

koeshiro 28.10.2013 19:04

Dorian_bs,
Создать функцию Которая будет вызывать сама себя. Со setTime тра та та.
Присвоить каждому игроку id целочисленному. И всё.

koeshiro 28.10.2013 19:05

Но с for тоже можно. Если не страшно забить всю ОЗУ

Dorian_bs 28.10.2013 19:07

koeshiro, то есть Вы считаете данный вариант наиболее оптимизированным? Без использования for и setInterval?

koeshiro 28.10.2013 19:09

Dorian_bs,
да. Ибо насколько знаю после выполнения функции и её перезапуска данные о ней перезаписываются. А вот с for по другому. Всё время все данные остаются. Если пишите на php не забывайте что стандартное время выполнение скрипта до 30 сек.

Dorian_bs 28.10.2013 19:10

koeshiro, Вы это имеете ввиду?
updata = function (user) {
     // выполняем необходимые функции
     setTimeout(function  () {
         updata(user);
     }, 200);
}

updata('123456789'); // инициализируем пользователя


PS: нет, я пишу на NodeJS

koeshiro 28.10.2013 19:18

Dorian_bs,
Не совсем. Пример:
function globalfun(num){
var i=0;
function tra-ta-ta(){
//Ваш код 
var s=setTimeOut(function  () {tra-ta-ta()},200);
if(i=>num){cleatInterval(s);}

Вызывать функцию надо после выполнения кода =)

Dorian_bs 28.10.2013 19:22

koeshiro, не сильно понял Вашего кода)
Во первых. У нас не используется интервал, а вы пытаетесь его очистить.
Во вторых переменная "i" всегда равна 0.

Dorian_bs 28.10.2013 19:25

koeshiro, и еще, на сколько я знаю - setTimeout сам очищается после выполнения.

koeshiro 28.10.2013 19:26

Dorian_bs, i=0? Ясен пень. Ибо в вашем коде должно быть i++ =) А clearInterval написал потому что привычка уже. С надеждой что вы поймёте меня, поймёте мой пример. Хотя надо было писать словами. =)


Часовой пояс GMT +3, время: 06:32.