Использование веб-воркеров для рисования с использованием собственных функций холста

Можно отправить CanvasPixelArray , полученный через getImageData , рабочему сценарию, и позволить рабочему сценарию манипулировать пикселями в своем фоновом потоке и в конечном итоге отправить обратно обработанный массив пикселей. .

Однако я использую встроенные функции рисования холста, например drawImage . Вызовы drawImage в настоящее время блокируют поток пользовательского интерфейса. Это вызывает медленную перерисовку кнопок и заметную задержку при нажатии на кнопку, и это лишь некоторые недостатки. (Изменить: теперь можно добиться небольшого улучшения с помощью ctx.imageSmoothingEnabled = false , по крайней мере, на WebKit с префиксом webkit .)

Я бы хотел переместить рисунок из основного потока в фоновый поток с помощью веб-воркеров. Однако я, похоже, не могу отправить холст или контекст работнику.

Я нашел это уведомление в MDN :

Примечание: как обычно, фоновые потоки, включая рабочие, не могут управлять DOM. Если действия, предпринятые фоновым потоком, должны привести к изменениям в DOM, они должны отправить сообщения своим создателям, чтобы выполнить эту работу.

Но я бы хотел оставить DOM как есть; Я просто хочу рисовать на элементе холста.Возможно ли это, или веб-воркерам действительно разрешено только вычислять, а не рисовать?

(Или, возможно, можно использовать такие функции, как drawImage , для управления CanvasPixelArray вместо рисунок на холсте?)

29
задан pimvdb 24 May 2012 в 08:50
поделиться