У меня есть две полотна внутри тела 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
Проблемы с производительностью веб-работника. ⇐ Javascript
Форум по Javascript
-
Anonymous
1744538718
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");
}
};
Подробнее здесь: [url]https://stackoverflow.com/questions/79571412/webworker-offscreen-canvas-performance-issues[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия