Показать сообщение отдельно
  #1 (permalink)  
Старый 12.12.2018, 20:24
Интересующийся
Отправить личное сообщение для NoobFindAnswer Посмотреть профиль Найти все сообщения от NoobFindAnswer
 
Регистрация: 25.07.2018
Сообщений: 13

Логическая бомба непонимания или суперсложный массив
Здравствуйте, есть проблема оптимизации. Я делаю мультиплеерную игру на ноде+сокет. И столкнулся с проблемой, я делаю двумерный массив 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
Ответить с цитированием