Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Логическая бомба непонимания или суперсложный массив (https://javascript.ru/forum/misc/76197-logicheskaya-bomba-neponimaniya-ili-superslozhnyjj-massiv.html)

NoobFindAnswer 12.12.2018 20:24

Логическая бомба непонимания или суперсложный массив
 
Здравствуйте, есть проблема оптимизации. Я делаю мультиплеерную игру на ноде+сокет. И столкнулся с проблемой, я делаю двумерный массив 80х80, состоящий из объектов, которые имеют несколько свойств, одно из которых - еще один объект с кучей свойств. И получается, что генерирую я вот так этот "суперсложный массив": :
for(var i =0; i<80;i++){
    sectors[i] = [];
    for(var j =0; j<80;j++){
        rand = Math.floor(Math.random() * (3 - 0) + 0);
        sectors[i][j] = settings.newSector(i,j,settings.land['ground_grass'+rand]);
    }
}

А на стороне клиента, прохожусь по "части" из них(всего 12х12 беру). И бешенно взлетает нагрузка на ЦП. Если закрыть вкладочку с игрой, и оставить серв включенным, то нагрузка пропадает. То есть можно сделать вывод, что обычное взятие из массив через [i][j] так сильно нагружает???Получается, что дело не в отрисовке на канвасе, а в вот этой вот операции
for(var i =0; i<12;i++){
            for(var j =0; j<12;j++){
                var item = map.location.sectors[i][j];
                var img = document.getElementById(item.ground.image_id);
                context.drawImage(img, -this.real_x + +this.x + item.len_x * item.cor_x, -this.real_y +this.y + item.len_y * item.cor_y  - item.ground.fix_y, item.len_x+item.ground.fix_x, item.len_y+item.ground.fix_y);
            }
        }

Выполнение вот этого второго куска кода По таймеру: если sectors 30х30, то от 0.26 ms до 0.56 ms. Если 60х60, то разброс увеличивается и иногда до 2ms доходит.
Обновление игры происходит раз в 1000/60 ms

j0hnik 12.12.2018 20:31

насколько велик context ?

NoobFindAnswer 12.12.2018 20:33

размером с экран юзера


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