mit Statement als schädlich

11. April 2006 um 07.52 Uhr von Douglas Crockford | In Entwicklung | 64 Kommentare

JavaScript die with Aussage sollte eine Kurzform für das Schreiben wiederkehrende Zugriffe auf Objekte liefern. Also anstatt zu schreiben

  ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing = true;
 ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang = true; 

Sie können schreiben

  mit (ooo.eee.oo.ah_ah.ting.tang.walla.walla) {
     bing = true;
     Knall = true;
 } 

Das sieht viel schöner. Bis auf eine Sache. Es gibt keinen Weg, dass man durch den Code anschaut, die sagen, bing und bang modifed erhalten. Wird ooo.eee.oo.ah_ah.ting.tang.walla.walla geändert werden? Oder werden die globalen Variablen bing und bang zu werden verprügelt? Es ist unmöglich, sicher zu wissen.

Die with Anweisung addiert die Elemente eines Objekts auf den aktuellen Bereich. Nur wenn es eine bing in ooo.eee.oo.ah_ah.ting.tang.walla.walla wird ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing zugegriffen werden.

Wenn Sie nicht lesen können, ein Programm, und darauf vertrauen, dass Sie wissen, was es tun wird, kann man nicht darauf vertrauen, dass es geht um korrekt zu arbeiten. Aus diesem Grund, der with sollte Anweisung vermieden werden.

Glücklicherweise JavaScript bietet auch eine bessere Alternative. Wir können einfach definieren var .

  var o = ooo.eee.oo.ah_ah.ting.tang.walla.walla;
 o.bing = true;
 o.bang = true;

Jetzt gibt es keine Zweideutigkeit. Wir können darauf vertrauen, dass es ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing und ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang dass festgelegt werden, und nicht irgendein glücklose Variablen.

Teilen und zu erweitern: Lesezeichen mit del.icio.us | Digg it! | reddit!

Synchrone v. Asynchronous

4. April 2006 um 11:55 Uhr von Douglas Crockford | In Entwicklung | 26 Kommentare

XMLHttpRequest kann synchron oder asynchron zu betreiben. Viele Menschen bevorzugen es synchron zu verwenden. Bei dieser Vorgehensweise wird die JavaScript-Engine blockiert, bis der Interaktion mit dem Server ist abgeschlossen. Weil es Blöcke, sieht der Ablauf der Steuerung viel wie ein gewöhnlicher Funktionsaufruf. Der zeitlichen Komplexität ist weg abstrahiert, so dass eine sehr familiäre und komfortable Programmier-Muster. Es funktioniert besonders gut, wenn der Server auf der gleichen Maschine, in der Nähe oder im LAN. Leider kann es sehr schlecht ab, wenn der Server unter hoher Last, oder wenn der Browser mit dem Server über eine langsame Verbindung verbunden. Da der JavaScript-Engine wird blockiert, bis die Anforderung abgeschlossen ist, wird der Browser eingefroren werden. Der Benutzer kann nicht die Anforderung abbrechen, kann nicht weg klicken, können nicht zu einer anderen Registerkarte gehen. Dies ist äußerst schlechtes Benehmen.

Glücklicherweise bietet XMLHttpRequest eine Option für asynchrone Operation. Wenn Sie das Set asyncFlag Flagge zu true , wird die JavaScript-Engine nicht zu blockieren. Stattdessen wird die Anfrage wird sofort beendet, mit einem potenziellen Aktion, die später ausgelöst werden, wenn das Ergebnis über den Antrag bekannt ist. Die Yahoo! Connection Manager bietet eine sehr schöne Schnittstelle zur Verfügung.

  var = cObj YAHOO.util.Connect.asyncRequest ('GET', 'http://myservice.com?req=update', {
     Erfolg: function (response) {
         alert (response.responseText);
     },
     Ausfall: function (response) {
         alert (response.statusText);
     }
 }); 

Sie liefern zwei Funktionen. Ihr success Funktion enthält alles, was als Ergebnis der Anfrage nachfolgenden passieren sollte. Also, wenn der Wunsch war, etwas zu erhalten JSON- Text, der auf die gebären sollte app.update Methode, dann ist Ihr success Funktion sein könnte

  Erfolg: function (response) {
         app.update (eval ('(' + response.statusText + ')'));
     } 

Asynchrone Programmierung ist etwas komplizierter, weil die Folge der Stellung eines Antrags in einer Funktion und nicht an das Frage-Anweisung eingeschlossen ist. Aber das Echtzeitverhalten, dass die Anwender Erfahrungen können erheblich besser sein, weil sie nicht sehen ein träger-Server oder Netzwerk-träge den Browser veranlassen, zu handeln, als wäre es abgestürzt war. Synchrone Programmierung ist respektlos und sollte nicht für Anwendungen, die von Menschen genutzt werden, eingesetzt werden.

Teilen und zu erweitern: Lesezeichen mit del.icio.us | Digg it! | reddit!

Hosted by Yahoo!

Copyright © 2006-2012 Yahoo! Inc. Alle Rechte vorbehalten. Datenschutz - Allgemeine Geschäftsbedingungen

Powered by WordPress auf Yahoo! Web Hosting .