Комментарии 20
Кстати, данные Canvas хранятся именно в Int32Array. Уверен, что их ещё будут оптимизировать.
Что будет, если передать неправильный тип?
Что будет, если передать неправильный тип?
Как ни странно не вылетит с ошибкой, просто не произойдет присвоения.
a = new Uint8Array(3);
a[1] = 'asdasdsad';
a == {0:0, 1:0, 2:0}
Проверил. На самом деле — присвоится нуль
a = new Uint8Array(3);
a[1] = 4;
a[1] = 'asdasdsad';
console.log( a ); // 0,0,0
Нда, действительно, сам себя запутал, не подумал проверить на более сложном примере.
Не совсем так. В WebGL используются правила конвертации типов из ECMA-262 (пункт 3 — Type Conversion Rules в спеке WebGL).
И, например, для Float32Array строчка будет конвертироваться в NaN:
И, например, для Float32Array строчка будет конвертироваться в NaN:
ar = new Float32Array(1);
ar [0] = 'asdasdsad';
console.log( a[0] ); // NaN
Попробуйте использовать метод subarray() на типизированном массиве, возможно, результаты теста окажутся другими.
интересно, зачем придумывать свой собственный синтаксис, почему не использовать устоявшиеся
int[]
long[]
и т.д.
int[]
long[]
и т.д.
Жаль, что Вы не описали использование типизированных массивов в качестве представления для ArrayBuffer.
на этом сайте выложены тесты для сравнения производительности встроенных массивов JS против TypedArray (создание, заполнение и т.п.) в различных браузерах
«Аналог в C»
Только char'ы имеют четко один байт, остальные из списка могут иметь отличные от приведенных в таблице значения.
Например sizeof(int) = 2 байта, или sizeof(double) = 10 байт, ну и так далее.
Зависит от платформы и от компилятора.
Только char'ы имеют четко один байт, остальные из списка могут иметь отличные от приведенных в таблице значения.
Например sizeof(int) = 2 байта, или sizeof(double) = 10 байт, ну и так далее.
Зависит от платформы и от компилятора.
Сравнение не совсем корректное:
В случае с Uint8Array вы создаете сразу массив с определенным количеством элементов.
В случае с нативным Array вы создаете массив нулевого размера и потом, по сути, увеличиваете его размер, что медленнее если определить размер массива сразу: a = new Array(size);
В случае с Uint8Array вы создаете сразу массив с определенным количеством элементов.
В случае с нативным Array вы создаете массив нулевого размера и потом, по сути, увеличиваете его размер, что медленнее если определить размер массива сразу: a = new Array(size);
Круто!
Интересно только — в какой версии IE они появятся…
Интересно только — в какой версии IE они появятся…
Подскажите, пожалуйста, у меня вот этот вариант приблизительно на 600 мс быстрее работает
По сравнению с
var ss = [];
ss[0] = [];
ss[1] = [];
ss[2] = [];
for(var i = 0; i<10000000;i++)
{
ss[0] = 0;
ss[1] = 1;
ss[2] = 5;
}
ss[0] = 0.0;
ss[1] = 1.0;
ss[2] = 5.0;
var dt01 = new Date().getTime();
for(var i = 0; i<10000000;i++)
{
ss[0][i] = 5.0 + ss[1][i] ;
ss[1][i] = ss[0][i] + ss[2][i] * 3.0;
}
var dt02 = new Date().getTime();
alert(dt02 - dt01);
По сравнению с
var ss = new Float32Array[];
ss[0] = 0.0;
ss[1] = 1.0;
ss[2] = 5.0;
var dt01 = new Date().getTime();
for(var i = 0; i<10000000;i++)
{
ss[0][i] = 5.0 + ss[1][i] ;
ss[1][i] = ss[0][i] + ss[2][i] * 3.0;
}
var dt02 = new Date().getTime();
alert(dt02 - dt01);
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Типизированые массивы