Возможно отправить CanvasPixelArray
, полученный с помощью getImageData
рабочему script, и позволить рабочему script манипулировать пикселями в фоновом потоке и, в конце концов, отправить обратно обработанный массив пикселей.
Однако я использую собственные функции рисования холста, например drawImage
. В настоящее время вызовы drawImage
блокируют поток пользовательского интерфейса. Это приводит к медленному перерисовке кнопок и заметной задержке при нажатии кнопки, чтобы назвать несколько недостатков. (Изменить: теперь можно выполнить небольшое улучшение с помощью ctx.imageSmoothingEnabled = false
, по крайней мере, на WebKit с префиксом webkit
.)
Я хотел бы переместить чертеж из основного потока в фоновый поток с помощью веб-рабочих. Однако, похоже, я не могу отправить холст или контекст рабочему.
Я нашел это уведомление о MDN:
Примечание. Как обычно, фоновые потоки, включая рабочих, не могут манипулировать DOM. Если действия, выполняемые фоновым потоком, должны привести к изменениям в DOM, они должны отправлять сообщения своим создателям для выполнения этой работы.
Но я хотел бы оставить DOM как есть; Я просто хочу рисовать вещи на элементе холста. Возможно ли это, или веб-работникам действительно разрешено вычислять и не рисовать?
(Или возможно ли использовать функции типа drawImage
для управления CanvasPixelArray
вместо рисования на холсте?)