2009-12-08 9 views

Respuesta

59

Pequeña actualización, ya que la pregunta es ahora más de la mitad de un año de edad:

En Chrome/Chromium 6 Ahora puede enviar un lienzo ImageData oponerse a un trabajador web, dejar que el trabajador web realizar cambios en el objeto y luego escribir de nuevo en el lienzo usando putImageData (..).

de Google Chromabrush lo hace de esta manera, el código fuente se puede encontrar aquí:

Actualización:

Las últimas instantáneas de desarrollo de Opera (10.70) y Firefox (4.0b1) también soportan pasar ImageDa ta objetos a un trabajador web.

Actualización 2017:

enlaces reales de Github (más fácil de encontrar los archivos necesarios desde Chromabrush):

+1

Déjame adivinar que IE es diferente? – Lothar

4

La especificación postMessage se actualizó hace unos meses a que le permite enviar objetos ImageData pero hasta el momento nadie se ha puesto en práctica ese comportamiento (todos estamos consiguiendo allí). El problema con el lienzo en sí es que es un elemento DOM y por lo tanto no funciona en un trabajador (no hay DOM).

Esto se planteó recientemente en las listas de distribución whatwg o de aplicaciones web, así que sospecho que comenzaremos a ver si es posible proporcionar una API apta CanvasRenderingContext2D en los trabajadores.

+0

que estaba bajo la impresión de que el WebWorker no permitiría ninguna interacción con un DOM ya que eso podría tener posibles problemas lems si varios webworkers están haciendo cambios. –

+3

El problema es que el DOM no tiene ningún concepto de concurrencia, por lo que los trabajadores no permiten ningún estado compartido. La única forma de comunicarse con un trabajador es con postMessage, y que realiza un clon de acuerdo con el "algoritmo de clonación estructurado interno" que básicamente se puede considerar como JSON pero con soporte adicional para algunos tipos de teclas (File, FileList, ImageData, Blob, Date y RegExp) – olliej

+3

Esta respuesta no está actualizada. La otra respuesta ahora es mejor. – Baxissimo

Cuestiones relacionadas