Usando Web Workers para desenhar usando funções nativas de tela
É possível enviar umCanvasPixelArray
obtido viagetImageData
para um script de trabalho e deixe o script de trabalho manipular os pixels em seu encadeamento em segundo plano e, eventualmente, poste a matriz de pixels manipulada de volt
No entanto, estou usando funções nativas de desenho de tela, comodrawImage
. OdrawImage
o momento, as chamadas @ estão bloqueando o thread da interface do usuário. Isso causa um redesenho lento dos botões e um atraso perceptível ao clicar em um botão, apenas para citar algumas desvantagens. (Editar: uma pequena melhoria agora pode ser realizada comctx.imageSmoothingEnabled = false
, pelo menos no WebKit com owebkit
prefixo.)
Gostaria de mover o desenho do thread principal para um thread de segundo plano usando Web Workers. No entanto, parece que não consigo enviar a tela nem o contexto para o trabalhado
Eu encontrei este aviso no MDN:
ota: Como de costume, os threads de segundo plano - incluindo os trabalhadores - não podem manipular o DOM. Se as ações executadas pelo encadeamento em segundo plano precisarem resultar em alterações no DOM, eles deverão postar mensagens de volta aos criadores para fazer esse trabalh
Mas gostaria de deixar o DOM como está; Eu simplesmente quero desenhar coisas em um elemento de tela. Isso é possível ou os Trabalhadores da Web realmente só podem calcular e não desenhar?
(Ou talvez seja possível usar funções comodrawImage
para manipular umCanvasPixelArray
em vez de desenhar em uma tela?)