С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript: HTML5 Canvas
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.08.2018
Сообщений: 14

Логическая бомба непонимания или суперсложный массив

11.12.2018, 23:22. Показов 897. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть проблема оптимизации. Я делаю мультиплеерную игру на ноде+сокет. И столкнулся с проблемой, я делаю двумерный массив 80х80, состоящий из объектов, которые имеют несколько свойств, одно из которых - еще один объект с кучей свойств. И получается, что генерирую я вот так этот "суперсложный массив": :
JavaScript
1
2
3
4
5
6
7
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] так сильно нагружает???
Получается, что дело не в отрисовке на канвасе, а в вот этой вот операции
JavaScript
1
map.location.sectors[i][j]
. Здесь что ли утечка? Получается ему так сложно взять из массива такой то элемент?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.12.2018, 23:22
Ответы с готовыми решениями:

MD5 и 2 недели непонимания
Входные данные выравниваются так, чтобы их размер был сравним с 448 по модулю 512 (L’ = 512 × N + 448). Сначала дописывают единичный...

Логическая операция ИЛИ
Добрый день, хотелось бы узнать как ввести логическое ИЛИ при наборе кода, а то ведь НЕ и И вводится довольно легко Shift + 1 и Shift + 7 +...

Логическая схема в базисе И,ИЛИ,НЕ
Выполнить сл. задания: а)Записать ЛФ в СДНФ; б)Миним. ЛФ с помощью карт Карно; в)Составить логическую схему в базисе И,ИЛИ,НЕ для...

4
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
12.12.2018, 01:29
NoobFindAnswer, в теории массивы располагаются в памяти одним объектом, т.е. получить доступ к элементу можно простой арифметикой указателей (если проводить аналогию на С). (но я не уверен насчет реализации массива в том же движке v8).

1. Операция доступа к элементам массива не должна занимать много процессорного времени.
2. Нагружать может либо цикл рендеринга либо еще что-то. Покажите цикл, которым вы проходитесь по части карты.
3. Генерация этого массива происходит в момент запуска сервера или клиента?
4. Можно с помощью console.time() замерить время выполнения цикла.
5. Что делает settings.newSector?
0
0 / 0 / 0
Регистрация: 01.08.2018
Сообщений: 14
12.12.2018, 21:43  [ТС]
3. Генерируется во время запуска сервера, единожды. ( это доказывает факт, что при выключенной вкладке браузера, но вкл сервере ЦП не нагружается)
5. Создает новый объект класса Sector. Я просто вынес через require, как вы говорили класс Sector и еще парочку, и как я понимаю вот так нужно их переносить.
2.
JavaScript
1
2
3
4
5
6
7
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);
            }
        }
Добавлено через 1 минуту
При увелечении массива sectors, нагрузка на ЦП взлетает

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

Добавлено через 8 часов 37 минут
Есть идеи почему так? Или как по другому это реализуется, просто это очень важный аспект

Добавлено через 3 минуты
Я заметил еще один момент - если я убираю эту отрисовку, то все равно лагает, почему так может быть? map я только генерирую один раз и всё, далее после того как убрал я эту отрисовку, он вообще не используется нигде просто передается каждый тик на сторону клиента, неужели так затратно передавать такой объект?
0
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
12.12.2018, 22:23
Цитата Сообщение от NoobFindAnswer Посмотреть сообщение
var img = document.getElementById(item.ground.imag e_id);
Возможно эта строчка все и тормозит. DOM относительно остального кода обычно медленный. Зачем вам этот image на странице?
0
0 / 0 / 0
Регистрация: 01.08.2018
Сообщений: 14
12.12.2018, 22:43  [ТС]
Ну чтобы тайл отрисовывать на канвасе) других способов я не нашел
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.12.2018, 22:43
Помогаю со студенческими работами здесь

Онлайн-магазин и непонимания привязки базы данных, создании формы регистрации и тому подобного
У меня очень много проблем с созданием простого интернет магазина обуви для Диплома. У меня есть сайт , точнее общее оформление, есть...

Wi Fi бомба
Полиция города Карлайл в Пенсильвании, США, четыре часа обезвреживала подозрительный предмет, который оказался обмотанным скотчем Wi-Fi...

Бомба
Игрушка на которой я изучал динамическую индикацию на семисегментных индикаторах. http://files.zujev.som/BF/BF_bomba_kroyd4.jpg ...

Бомба
Есть бомба, когда ейо подбираеш она должна взривать все обєкти с тегом Enemy в невеликой области? Как реализиривать? Как подбирать бомбу...

Нужна логическая схема 4-х разрядного сумматора или...
Ребят, помогите пожалуйста составить электросхему. есть 2 входных операнда, ограничение 4 разряда, схема должна выполнять любую из 16...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru