2014 dxdy logo

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

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




 
 Сколько влезает в массив javascript?
Сообщение15.04.2018, 08:29 
Пишу программу, она составляет массив данных (координат) и потом что-то рисует. Когда массив выходит за примерно 40 тысяч, впечатление, что он перестаёт расти (судя по нарисованной картинке). Это действительно предел и можно ли как-то бороться?

 
 
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 10:44 
Скорее у вас в коде что-то не то.

 
 
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 11:45 
Код простой: цикл в цикле, вычисляют координаты точек на сфере (первый цикл по параллелям, второй по меридианам). Если общее число точек превышает примерно 90 тысяч (сейчас проверил), рисуется только "шапочка" от сферы (тем меньшая, чем больше задать число параллелей и меридианов).

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

 
 
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 12:02 
Значит, надо отлаживать, смотреть что происходит. Найти первую проблемную итерацию (заодно выяснить, всегда ли она точно одна и та же), посмотреть во что превращается массив, какие координаты уходят в OpenGL вызовы.

-- 15.04.2018, 13:04 --

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

 
 
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 12:06 
Мне кажется, я где-то читал про ограничение (типа, в массив javascript влезает не больше 90 тысяч), но я не помню, где. Кто-нибудь пробовал массивы с сотнями тысяч?

 
 
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 12:57 
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 
А попробуйте миллион. 90 тысяч точек -- это по три числа каждая.

 
 
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 13:30 
А вы сами попробуйте :wink:
У меня работает. И десять миллионов работает, хотя браузер уже задумывается на несколько секунд.

 
 
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 14:47 
Да, вставил счётчики в свой код, массивы растут правильно. Буду думать, спасибо.

 
 
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 17:31 
Я подумал -- может, это WebGL ограничение. Не передаётся сразу миллион чисел. Где-то я видел что-то такое, но не помню, где.

 
 
 
 Re: Сколько влезает в массив javascript?
Сообщение15.04.2018, 18:04 
Вот это вполне возможно. Какой конкретно вызов вы используете?

 
 
 
 Re: Сколько влезает в массив javascript?
Сообщение22.04.2018, 14:01 
Проблема решена, это было ограничение 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 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group