Как оптимизировать сет в буферный массив?
Есть вопрос по оптимизации кода.
Цель понять как уменьшить объем кода в Example 1, без значительного уменьшения производительности.
Setup:
let data1={line:new Float32Array(50000)}
let data2={line:new Float32Array(50000)}
function setBuffer(name, figure_num, data_p){
let num = 5 * figure_num
let buffer_array = data1[name]
for (let i = 0, l = data_p.length; i < l; i++) {
buffer_array[num + i] = data_p[i];
}
}
Example 1:
let pt1=[1,2]
let pt2=[3,4]
let status=5
for(let i=0;i<10000;i++){
let buffer_array = data2['line']
let num = 5*i;
buffer_array[num+0] = pt1[0];
buffer_array[num+1] = pt1[1];
buffer_array[num+2] = pt2[0];
buffer_array[num+3] = pt2[1];
buffer_array[num+4] = status;
}
Example 2:
let pt1=[1,2]
let pt2=[3,4]
let status=5
for(let i=0;i<10000;i++){
setBuffer('line', i, [pt1[0],pt1[1],pt2[0],pt2[1],status])
}
Ответы (1 шт):
Автор решения: vp_arth
→ Ссылка
let pt1=[1,2]
let pt2=[3,4]
let status=5
let N = 5; // 10000
const data2 = {
line: new Float32Array(5*N),
};
for(let i=0;i<N;i++){
data2.line.set([pt1[0],pt1[1],pt2[0],pt2[1],status], 5 * i);
}
console.log(data2)
Хотя, при записи сэмпла в 5 элементов TypedArray.set вряд ли что-то выиграет у прямого доступа)
Мне кажется, если это стало действительно узким местом в вашем приложении, стоит посмотреть на какой-нибудь WebAssembly или, если дело происходит не в браузере, то на другой высокопроизводительный инструмент =)
