Tipps verrückt von Microsoft: JScript vs JavaScript (Teil 1)

Inzwischen erwarten wir von Microsoft so ziemlich alles, vor allem, wenn es um den Browser geht. Beleidigen Sie die Nachrichtendienste, ist jedoch ein wenig "unbequem zu akzeptieren.
Auf dem Blog IE7 kam heute ein Artikel ( IE + JScript Leistungsempfehlungen Teil 3: JavaScript Code Ineffizienzen ), wenn wir es so nennen Peter Gurewitsch, Leistung PM für IE, mit Teil III seiner "Beratung" für Entwickler.

Erster Punkt: warum Microsoft so ist entschlossen, ihre eigene Version von JavaScript zu implementieren - JScript genannt genau das - das Leben komplizieren überhaupt?

Zweiter Punkt: nur weil die JScript-Engine von Microsoft gehört, anstatt Zeit zu sagen, "uns", wie man um den Fehler zu bekommen, warum nicht begleichen sie ein für alle Mal?

Abgesehen von den ersten Vorschlag dieser Part III, die Sie direkt gelesen werden kann auf dem Blog oder auf Ajaxian , ist die zweite wirklich auffällig, und ich ehrlich gesagt nicht diregisco eigenen.

Verwenden Sie keine Property Accessor-Funktionen

Wenn Sie sagen, Fortschritt! In voller 2007 wird ein Projektleiter der Microsoft sagt uns Entwickler nicht die get-und set-Funktionen in JScript!
Der Wahnsinn, natürlich, ist eine seltsame Übel, das so plötzlich und irreführend wirkt. JScript - im Stil von Javascript - wird nach einem Objektmodell implementiert! Es ist eine objektorientierte Sprache, in der Folge die C + +. Die Tatsache, dass die Variablen von außen zugänglich sind (wie in dem Artikel darauf hingewiesen - offensichtlich by the way) ist definitiv kein rühmen, in der Tat. Die Kapselung Technik ist seiner Philosophie der OO-Programmierung. Kapseln Sie die Eigenschaften von virtual-Methode get-und set ist eine Kraft für objektorientierte Sprache, nicht eine Grenze. Beraten Sie nicht zu nutzen, ist nichts weniger als kriminell, und alle Performance-Probleme liegen in der Verantwortung des Interpreten und der Autoren, nicht die End-Entwickler.
Also am Ende, JScript ist als eine einfache C, wehe es als Behandlung von C + + verwendet, ansonsten "impallare" der Browser oder was auch immer.

Auch, wie auf dem Blog erwähnt, ist das ganze ein falsches Problem, weil JScript NICHT implementiert die wirklichen Funktionen get-und set nur Javascript tut!

Aber das Problem offensichtlich bleibt. In JavaScript (JScript leid, aber ich kann einfach nicht verdauen) gibt es verschiedene Techniken, um ein Objekt zu erstellen. Zum Beispiel können Sie es on the fly wie diese zu erstellen:

1
2
3
4
5
{ var myObject = {
, miaProprieta: 0,

( ) { alert ( "Hello" ) ; } mioMethodo: function () {alert ("Hallo");}
};

Auf diese Weise habe ich nicht deklariert eine Klasse. Das Objekt ist sozusagen deklariert und erstellt gleichzeitig. Es ist ein schneller Weg, wenn das Objekt, das wir brauchen, ist einzigartig.

Oder ist das Äquivalent für praktische Zwecke:

1
2
3
4
5
6
7
8
CMyObject function () {
= 0 ; diese miaProprieta = 0.

= function ( ) { alert ( "Hello" ) } diese. myMethod = function () {alert ("Hallo")}

}
/ /
new CmyObject ( ) ; iMyObject CMyObject var = new ();

) e poi si crea esplicitamente l'oggetto con new . In diesem Fall definieren wir zunächst die Klasse - mit einer function - ( CmyObject ) und dann explizit erstellen Sie das Objekt mit new .

Ein Teil der stilistischen Fragen der einzelnen Entwickler, bleibt das Problem, wie man Eigenschaften einer Klasse zuzugreifen. Ich kann allen Interessenten, comumque empfehlen, um die Antworten auf den Blog von Microsoft zu lesen, wirklich interessant.

Auf dem Blog gab es drei Zugriffsarten: mit den get-und set-Funktionen, direkte und Bewegen von Prototypen. Am Ende des schönen Sache war, dass auf dem Blog gibt es einen Code, um eine Testfahrt durchführen, erwähnt ein Test der drei oben genannten Methoden. Der Code ist auf dem Blog, aber ich melde es hier der Vollständigkeit halber:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17.
18
19
20.
21.
22.
23.
24
25
26.
27.
28.
29.
30
31.
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<Script>
/ / Langsam Auto Definition
SlowCar function ()
{
= 17 ; . diese m_tireSize = 17;
= 250 ; // One can always dream! diese. m_maxSpeed ​​= 250, kann / / One immer träumen!
= SlowCar_get_tireSize ; . diese GetTireSize = SlowCar_get_tireSize;
= SlowCar_put_tireSize ; . diese SetTireSize = SlowCar_put_tireSize;
}
SlowCar_get_tireSize function ()
{
; zurücksenden m_tireSize.
}
value ) SlowCar_put_tireSize Funktion (Wert)
{
= value ; . diese m_tireSize = Wert;
}
</ Script>


<Script>
/ / Schnellere Auto, nicht mehr Eigenschaftenaccessoren
FasterCar function ()
{
= 17 ; . diese m_tireSize = 17;
= 250 ; // One can always dream! diese. m_maxSpeed ​​= 250, kann / / One immer träumen!
}
</ Script>


<Script>
/ / Prototype Auto, benutzen Sie die Sprach-Features!
PrototypeCar function ()
{
= 17 ; . diese m_tireSize = 17;
= 250 ; // One can always dream! diese. m_maxSpeed ​​= 250, kann / / One immer träumen!
}

= function ( ) { return this . m_tireSize ; } ; .. PrototypeCar Prototype GetTireSize = function () {return dieses M_tireSize;.}
= function ( value ) { this . m_tireSize = value ; } ; . PrototypeCar Prototype SetTireSize = function (value) {dieses M_tireSize = Wert;.}.
</ Script>


<Script>
TestDrive function ()
{
new SlowCar ( ) ; // Safe and reliable, probably not fast slowCar SlowCar var = new () / / Sicher und zuverlässig, wahrscheinlich nicht schnell
new FasterCar ( ) ; // Lacks air-bags, probably faster fasterCar FasterCar var = new () / / Fehlt Airbags, wahrscheinlich schneller
new PrototypeCar ( ) ; // Can technology win the day? protoCar PrototypeCar var = new () / / Kann Technik den Sieg davontragen?


( new Date ( ) ) . getTime ( ) ; var start = (new Date ()) getTime ().
var i = 0 ; i < 100000 ; i ++ ) { slowCar. SetTireSize ( slowCar. GetTireSize ( ) + 1 ) ; } for (var i = 0; i <100000; i + +) {slowCar SetTireSize (slowCar. GetTireSize () + 1);.}
( new Date ( ) ) . getTime ( ) ; var end = (new Date ()) getTime ().
"Slow Car " + ( end - start ) + "<br>" ; . Ausgang innerHTML + = "langsames Auto" + (end - start) + "de";


new Date ( ) ) . getTime ( ) ; start = (new Date ()) getTime ().
var i = 0 ; i < 100000 ; i ++ ) { fasterCar. m_tireSize += 1 ; } for (var i = 0; i <100000; i + +) {fasterCar m_tireSize + = 1;.}
new Date ( ) ) . getTime ( ) ; Ende = (new Date ()) getTime ().
"Faster Car " + ( end - start ) + "<br>" ; . Ausgang innerHTML + = "Faster Car" + (end - start) + "de";


new Date ( ) ) . getTime ( ) ; start = (new Date ()) getTime ().
var i = 0 ; i < 100000 ; i ++ ) { protoCar. SetTireSize ( protoCar. GetTireSize ( ) + 1 ) ; } for (var i = 0; i <100000; i + +) {protoCar SetTireSize (protoCar. GetTireSize () + 1);.}
new Date ( ) ) . getTime ( ) ; Ende = (new Date ()) getTime ().
"Prototype Car " + ( end - start ) + "<br>" ; Ausgang innerHTML + = "Prototype Car" + (end - start) + "de".
}
</ Script>

"TestDrive();" > Test Drive Cars !</ button > <Button Onclick = "TestDrive ();"> Test Drive Autos! </ Button>
"output" ></ div > <Div Id = "output"> </ div>

Nun, dies ist der Ausgang (bezogen auf meinem Rechner) mit IE7:
Langsam Car 515
Faster Car 63
Prototype Car 547

Mit FireFox (v.2.0.0.1):
Langsam Car 156
Faster Car 47
Prototype Car 172

Mit Opera (v.9.10):
Langsam Car 172
Faster Car 47
Prototype Car 172

Kurz :) IE7 kommt wirklich schlecht ... Ich weiß nicht, ob Sie den großen Unterschied bemerken. Also ich würde sagen JScript abgeschafft werden könnte, gelöscht, gelöscht, verdampft. Wir hoffen, dass Microsoft ihr zu Javscript und nicht Surrogate anzunehmen entscheidet.

Es sind keine Kommentare für diesen Beitrag

Hinterlasse einen Kommentar

TAG XHTML ERLAUBT: Code-Eingabe:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL