Spaß Mit Schnellem JavaScript

Spaß Mit Schnellem JavaScript
Copyright © blog.vlad1.com
For original English text, go to: http://blog.vlad1.com
Translated by A.Romanova

Schnell JavaScript ist ein Eckstein des modernen Webs. In der Vergangenheit mussten Anwendungsautoren auf Browser-Entwickler warten, um jede komplizierte Funktionalität im Browser selbst durchzuführen, so dass sie darauf aus dem Schrift-Code zugreifen konnten. Heute können sich selbst viele von jenen Funktionen direkt in JavaScript bewegen. Das ist im Vorteil für Anwendungsautoren: Es gibt kein Bedürfnis auf eine neue Version eines Browsers zu warten, bevor Sie Ihren app entwickeln oder verladen können, können Sie die Funktionalität genau schneidern über was Sie brauchen, und Sie können es direkt verbessern, (machen Sie es schneller, höhere Qualität, genauer, usw.).

Hier gibt es zwei Beispiele, die damit gibt an, was mit dem verbesserten JS Motor und Fähigkeiten getan werden kann, die in Firefox 4 präsentiert werden. Das erste Beispiel zeigt eine einfache webbasierte Dunkelkammer, die Ihnen erlaubt, Farbenkorrektur auf einem Image durchzuführen. Der HTML+JS ist ungefähr 700 Linien des Codes, jQuery nicht zählend. Das wird auf Demo beruht, dass mit dem Nativen Kunden (NaCl) SDK von Google eingeschlossen wird; in dieser Demo wird die Farbenkorrektur-Arbeit innerhalb des Nativen Kodes  getan, der durch NaCl läuft. Diese Demo (ursprünglich präsentiert als “zu langsam in JavaScript zu laufen”), ist einige tausenden Linien des Codes, und enthalt  Herunterladen und Installation der spezifischen Plattform-Compiler, vielfache Schritte zu prüfen/ sich Code aufzustellen, und ein Plugin auf der Browser-Seite zu installieren.

Ich bekomme ungefähr 15-16 Rahmen pro Sekunde mit dem Voreinstellung eines weggezoomten Bild (ungefähr 5 Millionen Pixel pro Sekunde – diese Zahl wird nicht durch die Bildgröße betroffen) auf meinem MacBook Pro, der bestimmt für die lebende Manipulation schnell genug ist. Der Algorithmus konnte bis dazu zusammengezogen werden, dieses noch schneller zu machen. Weitere Optimierung zum JS Motor konnten auch hier helfen; zum Beispiel habe ich bemerkt, dass wir viel Zeit für Herstellung des Fließkommas verbringen, zu ergänzen die Konvertierungen für Schreibung der geschätzten Pixel, zurück zur Aufstellungsleinwand, wegen wie die Leinwand-API das Bilddatenberühren gibt an.

Das Webdunkelkammer-Werkzeug unterstützt auch drag & drop; so können Sie jedes Bild von Ihrem Computer nehmen und lässt es sich auf die Leinwand fallen, um es zu laden. Vor langer (lange!) Zeit, zurück 2006, schrieb ich einen Zusatzgerät genannt “Croppr!”. Es wurde beabsichtigt, mit Flickr verwendet zu werden, den Benutzern zu erlauben, mit kundenspezifischen Getreide jedes Bildes zu spielen, und dann Getreide-Vorschläge in anzusehenden Anmerkungen zu verlassen, Croppr verwendend. Es sicher arbeitet nicht mehr fast, aber es würde ordentlich sein, es zu aktualisieren: dieses Mal sowohl mit der Saatbestellung als auch mit Farbenkorrektur. Jemand mit dem Zusatzgerät (vielleicht ein Jetpack jetzt!) konnte dann ein Flickr Foto und Experiment besuchen, und Vorschläge für den Fotografen verlassen.

Das zweite Beispiel beruht sich auf irgendeine Arbeit, die Dave Humphrey und andere getan haben, um Audiomanipulation zur Webplattform zu bringen. Ursprünglich schloss ihre Spekulation einen vorgeschätzten FFT mit jedem Audiorahmen ein, der an das Web app geliefert ist. Ich habe vorgeschlagen, dass es kein Bedürfnis danach gibt – während ein FFT für einige Anwendungen nützlich ist, für andere würde es vergeudet Arbeit sein. Diese apps, die einen FFT wollen, konnten ein in JS durchführen. Einige Abrisspunkt-Zahlen unterstützten das – verwenden die geschaffenen Reihe, das ursprünglich für WebGL geschaffen wurde, einen FFT in JS schätzend, wurde sich von der Geschwindigkeit des heimischen Kodes genähert. Wieder konnten beide beschleunigt werden (vielleicht SSE2 oder etwas wie Mono verwendend. Simd auf der JS Seite), aber ist es schnell genug, um bereits nützlich zu sein.

Die Demo zeigt dieses in der Handlung. Ein numerischer Abrisspunkt ist nicht wirklich das alles interessantes, so stattdessen nehme ich eine Videobüroklammer, und weil er spielt, ziehe ich einen Teil des grünen Kanals jedes Rahmens heraus und schätze seinen 2D FFT, der dann gezeigt wird. Die ursprüngliche Büroklammer spielt an 24 Rahmen pro Sekunde, so das ist die obere Grenze des Demos. Das Verwenden von Float32 tippte Reihe, Berechnungs- und Playback-Erlös um 22-24fps für mich.

Sie können nach der Videosteuerungen ergreifen und zu schrubben zu einem spezifischen Rahmen. (Die Rahmenrate-Berechnung ist nur richtig, wenn das Video normalerweise spielt, nicht wenn Sie schrubben.) Die Videoquelle verwendet Theora, so werden Sie einen Browser brauchen, der Theora Inhalt spielen kann. (Ich hatte keinen ähnlichen Büroklammer, die WebM verwendet, oder könnte ich das verwendet zu haben.)

Diese Beispiele demonstrieren die Kraft von Spur-gegründeten JIT Technik, die Firefox für Beschleunigung des JavaScript mit Firefox 3.5 verwendet hat. Jedoch können nicht  ganzen Code solche dramatischen Beschleunigungen von diesem Typ der Beschleunigung sehen. Deswegen werden wir eines vollen gegründeten-Methode JIT für Firefox 4 einschließen (für mehr Details, siehe den blog von David Anderson, sowie den blog von David Mandelin). Das wird bedeutsam schnellerer Grundlinie JS Leistung besorgen, mit der Spur JIT wird ein Turbolader für diesen Code bekommen, für den es natürlich gelten würde.

Das Kombinieren schnell JavaScript Leistung neben neuen Webplattform-Technologien wie WebGL und Audio-wird für einige aufregendes Web apps machen, und ich freue mich darauf zu sehen, was Entwickler mit ihnen tun!

Editieren Sie: hat man einige vorgenommene Änderungen im Demo in der letzten Minute gemacht, die sich damit beendet haben, dass in einige leichten gebrochenen Version von jQuery UI gezogen wurden, das nicht geeignet für Safari war. Sollte jetzt befestigt werden!