Ist putImageData(...) schneller als die der Methode drawImage(...)?
Denke ich schon, aber ich brauchte, um es zu beweisen.
Ich denke, es ist der gleiche Fall wie mit Flash und seine Bitmap-vs BitmapData. Grundsätzlich BitmapData ist eine nicht-visuelle extrahieren der Daten in der Bitmap, die es ermöglicht sehr einfache und schnelle Manipulationen.
Denke ich, dass für high-performance-Lösungen, wie Spiele, extrahieren der Bilddaten aus jedem Bild (zum Beispiel jede sprite), und Zwischenspeichern in einem "Vermögen" Wörterbuch ist eine bessere Lösung als das zeichnen der sprites sich über die Leinwand, immer und immer wieder.
Könnte jemand beweisen?
Auch, putImageData nicht funktionieren, wenn die gleichen Ursprungs-Polizei unterbrochen
InformationsquelleAutor user802232 | 2011-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme keinen Kredit für die Umsetzung dieser test zusammen, aber man kann deutlich sehen, die Leistung der mit
drawImage()
mit einer Leinwand und ein Bild sowie die Leistung vonputImageData()
hier:http://jsperf.com/canvas-drawimage-vs-putimagedata/3
Wie der jetzt
drawImage()
ist viel schneller alsputImageData()
. Letzte, was ich hörte, war dies nicht beabsichtigt, und die browser-Entwickler waren auf der Suche nach Verbesserung der performance-Lücke.Wie klassische Flash(nicht neuen Stage3D - /Maulwurfshügel Sachen) optimiert die Dinge alle im Hauptspeicher und dann kopieren, in Grafik-Speicher. Leinwände befinden sich hauptsächlich in der Grafik-Speicher(je nach browser/version/Mond-phase) und ändern Sie Pixel per javascript, die Bilddaten Bedarf kopiert werden, in den Hauptspeicher laden. Dann zeichnen Sie die Bilddateien, die Sie kopieren müssen die es zurück zu den Grafik-Speicher.
Lesen Grafikspeicher vom Haupt-CPU ist EXTREM LANGSAM auf fast alle video-Karten... Blick auf die Spezifikationen für das Lesen RSX-Speicher aus der Zelle auf der PS3(4GB/s schreiben vs. 16MB/s Lesen, {{256-mal langsamer!}}) ps3devwiki.com/... (die Zelle ist die Haupt-CPU und die RSX ist eine Nvidia-GPU ausgelegt)
Nach der neueste jsperf - test-revision
drawImage()
ist immer noch am schnellsten mit der weit.InformationsquelleAutor Xenethyl
Für größere Leinwände, die ich fand, dass es nicht so viel Unterschied, aber putImageData ist definitiv nicht so performant wie drawImage für das kopieren von Gemälden.
Hier sind einige Testfälle, die ich verwendet habe:
http://jsperf.com/canvas-size-test-case/3
Habe ich am Ende mit einige performance-Probleme mit dem gesamten source-Leinwand-Format ist, unabhängig von der Größe der Daten bin ich eigentlich kopieren.
InformationsquelleAutor floatingice