Я пишу диаграмму «водопада» для приемника SDR, который отображается на холсте на веб-странице.
Размер холста w = 1000 h = 800 пикселей.Верхняя строка доставляется каждые 50 мс с сервера.Браузер (используя javascript) должен переместить все строки на одну строку вниз, а затем вставить новую строку вверху.Это дает вид водопада, в котором все пиксели движутся сверху вниз.
Работает нормально, но нагрузка на процессор для перемещения пикселя очень высокая, слишком высокая, например, для малины.
Что я делаю:
var imagedata = context.getImageData(0,0,pixwidth,height-1);
var dataCopy = new Uint8ClampedArray(imagedata.data);
for(i=(dataCopy.length - (2*pixwidth*4)); i>= 0; i--) {
dataCopy[i+ pixwidth*4] = dataCopy[i];
}
imagedata.data.set(dataCopy);
// insert new top line
// ....
context.putImageData(imagedata, 0, 0);
Я также пытался напрямую скопировать данные пикселей в imagedata [некоторый индекс], что дает почти такую же плохую производительность.
В другомC-Program Я сделал то же самое с помощью простой операции memcpy, которая очень быстрая.Но что делать в Javascript?Имеется 800.000 пикселей, что составляет 3.200.000 байтов.Как я могу скопировать или переместить их с наилучшей производительностью в Javascript?