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

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

11.12.2018, 23:22. Показов 891. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru