Я хочу спросить, быстрее ли и эффективнее ли память рисовать серию изображений на холсте с помощью WebAssembly / WASM?
Я спрашиваю об этом, так как я тестировал рисование серии изображений (анимации) как в основном пользовательском интерфейсе, так и с веб-работниками. Для нескольких холстов ( 1-5 холстов ) производительность невыносима, однако для большего количества холстов (, например, 20-25 ) сценарий немного отличается, рендеринг становится замедленным.
Вот код в основном пользовательском интерфейсе:
const videoDecoder = new Worker("videoDecoder.js");
const canvas = document.querySelector("#canvas");
const offscreen = canvas.transferControlToOffscreen();
videoDecoder.postMessage({ action: 'init', canvas: offscreen }, [offscreen] );
Вот мой веб-работник:
onmessage = async function (e) {
const blob = e.data;
blob.arrayBuffer().then(arrayBuffer => {
const uint8Array = new Uint8Array(arrayBuffer);
for(;;;) {
const offsetIdx = ...;
const endIdx = ...;
const jpegArray = uint8Array.slice(offsetIdx, endIdx);
const blob = new Blob([jpegArray], {type: "image/jpeg"});
drawImage(blob);
}
}
}
async function drawImage(blob) {
const bmp = await createImageBitmap(blob);
context.drawImage(bmp, 0, 0);
bmp.close();
}
Это работает Хорошо, что он может отображать изображения в браузере от веб-работника, но, как уже упоминалось, при 1-5 полотнах он все еще плавный, но с большим количеством полотен рендеринг в браузере становится очень медленным.
Итак, я хочу спросить быстрее ли рисовать серии изображений на холсте с помощью WebAssembly ? Или не будет никакого теоретического прироста производительности по сравнению с тем, как это делается сейчас с подходом веб-работника?