Beim Entwerfen von Babylon.js v2.0(eine Bibliothek zum Erstellen von 3D im Web), habe ich mir kürzlich gewünscht, dass es mehr APIs gibt fließend-Das heißt, ich wünschte, die Gemeinschaft könnte die Arbeit leichter lesen, verstehen und darauf aufbauen, während sie weniger Zeit in den technischen Dokumenten verbringt.
In diesem Lernprogramm gehe ich durch fließende APIs: Was ist zu beachten, wie man sie schreibt und welche Auswirkungen die Browser-übergreifende Auswirkungen haben.
EIN fließende API, Wie in diesem Wikipedia-Artikel angegeben, handelt es sich um eine Implementierung einer objektorientierten API, die für besser lesbaren Code sorgt. JQuery ist ein hervorragendes Beispiel dafür, was Sie mit einer fließenden API tun können:
$ ('') .html ("Fluent API are cool!") .addClass ("header") .appendTo ("body");
Mit der fließenden API können Sie Funktionsaufrufe verketten, indem Sie dieses Objekt zurückgeben.
Wir können leicht eine fließende API wie folgt erstellen:
var MyClass = Funktion (a) this.a = a; MyClass.prototype.foo = function (b) // Mache einige komplexe Arbeiten this.a + = Math.cos (b); kehre das zurück;
Wie Sie sehen können, geht es bei dem Trick nur darum, das zurückzugeben diese
object (Verweis auf die aktuelle Instanz in diesem Fall), damit die Kette fortgesetzt werden kann.
Wenn Sie nicht wissen, wie das Schlüsselwort "this" in JavaScript funktioniert, empfehle ich Ihnen, diesen großartigen Artikel durch zu lesen Mike West.
Wir können dann Anrufe verketten:
var obj = new MyClass (5); obj.foo (1) .foo (2) .foo (3);
Bevor ich dasselbe mit Babylon.js versuchte, wollte ich sichergehen, dass dies nicht zu Performanceproblemen führt.
Also habe ich einen Benchmark gemacht!
var count = 10000000; var MyClass = Funktion (a) this.a = a; MyClass.prototype.foo = function (b) // Mache einige komplexe Arbeiten this.a + = Math.cos (b); kehre das zurück; MyClass.prototype.foo2 = function (b) // Mache einige komplexe Arbeiten this.a + = Math.cos (b); var start = new Date (). getTime (); var obj = new MyClass (5); obj.foo (1) .foo (2) .foo (3); for (var index = 0; index < count; index++) obj.foo(1).foo(2).foo(3); var end = new Date().getTime(); var start2 = new Date().getTime(); var obj2 = new MyClass(5); for (var index = 0; index < count; index++) obj2.foo2(1); obj2.foo2(2); obj2.foo2(3); var end2 = new Date().getTime(); var div = document.getElementById("results"); div.innerHTML += obj.a + ": With return this: " + (end - start) + "ms
"; div.innerHTML + = obj2.a +": Ohne Rückgabe: "+ (end2 - start2) +" ms ";
Wie du siehst, foo
und foo2
genau das gleiche tun. Der einzige Unterschied ist das foo
kann gekettet werden, während foo2
kann nicht.
Offensichtlich unterscheidet sich die Anrufkette zwischen:
obj.foo (1) .foo (2) .foo (3);
und
obj2.foo2 (1); obj2.foo2 (2); obj2.foo2 (3);
Mit diesem Code habe ich es auf Chrome, Firefox und IE ausgeführt, um festzustellen, ob ich mir Sorgen um die Leistung machen muss.
Und hier sind die Ergebnisse, die ich bekam:
Die Sache ist, dass ich eine Funktion in die Funktion eingefügt habe (Math.cos
) um eine durch die Funktion durchgeführte Behandlung zu simulieren.
Wenn ich alles entferne und einfach die Rückkehr
Aussage, auf allen Browsern gibt es keinen Unterschied (eigentlich nur eine oder zwei Millisekunden für 10.000.000 Versuche). Sie können dies für sich selbst über die Browser testen. Und wenn Sie die Geräte nicht zur Hand haben, gibt es auf dev.modern.IE viele kostenlose Tools. Testen Sie eine virtuelle Maschine einfach nicht mit einem realen Gerät.
Meine Schlussfolgerung lautet also: Es ist ein Versuch!
Eine fließende API ist großartig - sie produziert besser lesbaren Code, und Sie können ihn ohne Probleme oder Leistungsverlust verwenden!
Es mag Sie ein wenig überraschen, aber Microsoft bietet eine Reihe von kostenlosen Informationen zu vielen Open-Source-JavaScript-Themen. Wir haben uns zum Ziel gesetzt, mit Microsoft Edge viel mehr zu schaffen. Schauen Sie sich meine eigenen an:
Oder die Lernreihe unseres Teams:
Und einige kostenlose Tools: Visual Studio Community, Azure Trial und Cross-Browser-Testtools für Mac, Linux oder Windows.
Dieser Artikel ist Teil der Web-Dev-Tech-Serie von Microsoft. Wir freuen uns zu teilen Microsoft Edge und das Neue EdgeHTML-Rendering-Engine mit dir. Erhalten Sie kostenlose virtuelle Maschinen oder testen Sie remote auf Ihrem Mac, iOS, Android oder Windows-Gerät. http://dev.modern.ie/.