Проблемы с производительностью веб-работника.Javascript

Форум по Javascript
Ответить
Anonymous
 Проблемы с производительностью веб-работника.

Сообщение Anonymous »

У меня есть две полотна внутри тела HTML-файла. Я получаю доступ к первым холстам обычно из основного сценария потока и выполняю анимацию с запросом QuestionAnimationFrame. Второй холст должен нарисовать фон и получить массив объектов на кадр для рисования. Поскольку этот фоновый рисунок относительно тяжелый, и я не хочу, чтобы анимация на первом холсте отстаивала, я передал второй холст через TransferControlltofoffscreen на веб -работник. Каждый кадр, который я посылаю списком объектов в веб -работник, и он рисует их непосредственно ко второму холсту. Но каким -то образом производительность на главном холсте также ухудшается, если я увеличу задачи рендеринга у работника? Это настолько плохо, что даже рендерирование всего внутри основного потока кажется быстрее. < /P>
Я уже пытался запросить другой кадр только в том случае, если работник сделал предыдущий, и я знаю, что я мог бы увеличить производительность, сделав функции рендеринга более эффективными, но мне интересно, почему я получаю так плохие результаты от веб -работы.main.js
const mainCanvas = document.getElementById("main-canvas");
const ctx = mainCanvas.getContext("2d");
let offscreenCanvas = document.getElementById("offscreen-canvas");
offscreeenCanvas = offscreenCanvas.tranferControlToOffscreen();

const worker = new Worker("worker.js");
worker.postMessage({type: "init", canvas: offscreenCanvas}, [offscreenCanvas]);

let workerIsDone = true;

function drawScene(objects){

renderForeground(ctx);

if (workerIsDone){
workerIsDone = false;
worker.postMessage({type:"render", objects: objects});
}

requestAnimationFrame(drawScene);
}

worker.onmessage = ()=> workerIsDone = true;
< /code>
//worker.js

let offscreenCanvas;
let ctx;

onmessage = (e) => {
if (e.data.type === 'init') {
const { canvas } = e.data;

offscreenCanvas = canvas;
ctx = offscreenCanvas.getContext('2d');
}

if (e.data.type === 'render' && ctx) {
renderBackground(ctx, e.data.objects);

postMessage("Worker is finished");
}
};


Подробнее здесь: https://stackoverflow.com/questions/795 ... nce-issues
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»