Verwenden von Web Workers zum Zeichnen mit nativen Canvas-Funktionen

Es möglich ist, senden Sie eine CanvasPixelArray erhältlich über getImageData zu einer worker-Skript, und lassen Sie den worker-Skript manipulieren die Pixel im hintergrund-thread, und schließlich nach der manipulierten pixel-array zurück.

Aber ich bin mit native canvas-Zeichenfunktionen, wie drawImage. Die drawImage Anrufe sind derzeit die Blockierung der UI-thread. Dies bewirkt, dass langsame Neuzeichnen von buttons, und eine deutliche Verzögerung beim klicken auf eine Schaltfläche, um nur ein paar Nachteile. (Edit: Eine kleine Verbesserung können jetzt erreicht werden mit ctx.imageSmoothingEnabled = false zumindest auf WebKit mit der webkit Präfix.)

Ich würde gerne verschieben Sie die Zeichnung aus dem Haupt-thread in einen hintergrund-thread mit Web-worker. Aber ich weiß nicht zu sein scheinen in der Lage zu senden, die Leinwand und den Rahmen für den Arbeitnehmer.

Habe ich dieser Hinweis auf MDN:

Hinweis: Wie üblich, hintergrund-threads—einschließlich der Arbeitnehmer—nicht das DOM manipulieren. Wenn die Maßnahmen, die hintergrund-thread müssen auch änderungen der DOM, Sie sollten das veröffentlichen von Nachrichten zurück, um Ihre Schöpfer zu tun, die Arbeit.

Aber ich möchte verlassen die DOM -, als -, ist; ich möchte einfach Dinge zeichne auf ein canvas-element. Ist das möglich, oder sind Web-Arbeiter wirklich nur berechnen darf und nicht zum zeichnen?

(Oder ist es vielleicht möglich, Sie zu verwenden, Funktionen wie drawImage zu manipulieren CanvasPixelArray statt der Zeichnung auf eine Leinwand?)

InformationsquelleAutor der Frage pimvdb | 2011-11-17

Schreibe einen Kommentar