2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Сколько влезает в массив javascript?
Сообщение15.04.2018, 08:29 
Заслуженный участник


31/12/15
936
Пишу программу, она составляет массив данных (координат) и потом что-то рисует. Когда массив выходит за примерно 40 тысяч, впечатление, что он перестаёт расти (судя по нарисованной картинке). Это действительно предел и можно ли как-то бороться?

 Профиль  
                  
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 10:44 
Заслуженный участник


02/08/11
7004
Скорее у вас в коде что-то не то.

 Профиль  
                  
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 11:45 
Заслуженный участник


31/12/15
936
Код простой: цикл в цикле, вычисляют координаты точек на сфере (первый цикл по параллелям, второй по меридианам). Если общее число точек превышает примерно 90 тысяч (сейчас проверил), рисуется только "шапочка" от сферы (тем меньшая, чем больше задать число параллелей и меридианов).

ИзображениеИзображениеИзображение

 Профиль  
                  
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 12:02 
Заслуженный участник


02/08/11
7004
Значит, надо отлаживать, смотреть что происходит. Найти первую проблемную итерацию (заодно выяснить, всегда ли она точно одна и та же), посмотреть во что превращается массив, какие координаты уходят в OpenGL вызовы.

-- 15.04.2018, 13:04 --

Попробовать нарисовать только проблемную часть (то есть пропустить первые итерации). В общем, первый этап решения таких проблем — сбор информации, как можно больше.

 Профиль  
                  
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 12:06 
Заслуженный участник


31/12/15
936
Мне кажется, я где-то читал про ограничение (типа, в массив javascript влезает не больше 90 тысяч), но я не помню, где. Кто-нибудь пробовал массивы с сотнями тысяч?

 Профиль  
                  
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 12:57 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
george66

Используется синтаксис Javascript
var arr = [1];
var i;
for (i = 0; i < 100000; i++) {
  arr.push(i);
}
console.log(arr.length);
У меня этот код выводит в консоль 100001, что явно больше, чем 90000.

 Профиль  
                  
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 13:01 
Заслуженный участник


31/12/15
936
А попробуйте миллион. 90 тысяч точек -- это по три числа каждая.

 Профиль  
                  
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 13:30 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
А вы сами попробуйте :wink:
У меня работает. И десять миллионов работает, хотя браузер уже задумывается на несколько секунд.

 Профиль  
                  
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 14:47 
Заслуженный участник


31/12/15
936
Да, вставил счётчики в свой код, массивы растут правильно. Буду думать, спасибо.

 Профиль  
                  
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 17:31 
Заслуженный участник


31/12/15
936
Я подумал -- может, это WebGL ограничение. Не передаётся сразу миллион чисел. Где-то я видел что-то такое, но не помню, где.

 Профиль  
                  
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 18:04 
Заслуженный участник


02/08/11
7004
Вот это вполне возможно. Какой конкретно вызов вы используете?

 Профиль  
                  
 
 Re: Сколько влезает в массив javascript?
Сообщение22.04.2018, 14:01 
Заслуженный участник


31/12/15
936
Проблема решена, это было ограничение WebGL. Некоторые натуральные числа (индексы) там передаются как UNSIGNED_SHORT и их не хватает. Решение состоит в переходе на WebGL2, где можно использовать UNSIGNED_INT

-- 22.04.2018, 14:05 --

В функции gl.drawElements заменить gl.UNSIGNED_SHORT на gl.UNSIGNED_INT
Строку
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexData), gl.STATIC_DRAW);
заменить на
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint32Array(indexData), gl.STATIC_DRAW);

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group