con l'istruzione Considered Harmful
11 aprile 2006 alle 07:52 am da Douglas Crockford | In Development | 64 commenti JavaScript with dichiarazione è stata destinata a fornire una scorciatoia per la scrittura di accessi ricorrenti agli oggetti. Così, invece di scrivere
ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing = true; ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang = true;
È possibile scrivere
con (ooo.eee.oo.ah_ah.ting.tang.walla.walla) { bing = true; Bang = true; }
Che sembra molto più gradevole. Tranne una cosa. Non c'è modo che si può dire guardando il codice che bing e bang otterrà modifed. Sarà ooo.eee.oo.ah_ah.ting.tang.walla.walla essere modificato? O le variabili globali bing e bang vengono rovinati? E 'impossibile sapere con certezza.
Il with istruzione somma i membri di un oggetto per l'ambito corrente. Solo se c'è un bing in ooo.eee.oo.ah_ah.ting.tang.walla.walla sarà ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing accedere.
Se non è possibile leggere un programma e di essere fiducioso che si sa che cosa sta per fare, non si può avere fiducia che sta andando a lavorare correttamente. Per questo motivo, il with dichiarazione deve essere evitata.
Fortunatamente, JavaScript fornisce anche una soluzione migliore. Si può semplicemente definire una var .
var o = ooo.eee.oo.ah_ah.ting.tang.walla.walla; o.bing = true; o.bang = true;
Ora non c'è alcuna ambiguità. Possiamo avere fiducia che è ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing e ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang che vengono impostate, e non qualche variabili sventurati.
Condividi ed estendere: Segnalibro con Del.icio.us | Digg it! | reddit!
Synchronous Asynchronous V.
4 aprile 2006 alle 11:55 am da Douglas Crockford | In Development | 26 commentiXMLHttpRequest può funzionare in modo sincrono o asincrono. Molte persone preferiscono utilizzare in modo sincrono. Quando viene usato questo modo, il motore JavaScript viene bloccata finché l'interazione con il server è completa. Perché blocca, il flusso di controllo assomiglia molto a una invocazione funzione ordinaria. Complessità temporale è astratta, lasciando un modello di programmazione molto familiare e confortevole. Funziona particolarmente bene quando il server è sulla stessa macchina, o nelle vicinanze della LAN. Purtroppo, si può eseguire molto male se il server è sotto carico pesante, o se il browser è connesso al server sopra un collegamento lento. Dato che il motore JavaScript è bloccato fino a quando la richiesta viene completata, il browser sarà congelato. L'utente non può annullare la richiesta, non è possibile fare clic di distanza, non può andare in un altro tab. Questo è un comportamento estremamente negativo.
Fortunatamente, XMLHttpRequest fornisce un'opzione per il funzionamento asincrono. Quando si imposta la asyncFlag bandiera true , il motore JavaScript non blocca. Invece la richiesta restituisce immediatamente, con un potenziale d'azione che verrà attivato in seguito quando il risultato sulla richiesta è noto. Il Yahoo! Connection Manager fornisce un'interfaccia molto piacevole per questo.
var = CObj YAHOO.util.Connect.asyncRequest ('GET', 'http://myservice.com?req=update', { successo: function (risposta) { alert (response.responseText); }, fallimento: function (risposta) { alert (response.statusText); } });
Si fornisce due funzioni. Il vostro success funzione contiene tutto ciò che dovrebbe accadere come conseguenza della richiesta successiva. Quindi, se la richiesta era di ottenere qualche JSON testo che dovrebbe essere consegnato al app.update metodo, allora il success funzione potrebbe essere
successo: function (risposta) { app.update (eval ('(' + response.statusText + ')')); }
Programmazione asincrona è leggermente più complicato perché la conseguenza di una richiesta è incapsulato in una funzione invece di seguire l'istruzione richiesta. Ma il comportamento in tempo reale che le esperienze degli utenti possono essere significativamente migliore, perché non vedranno un server di rete lento o pigro che il browser di agire come se fosse caduto. Programmazione sincrona è irrispettoso e non deve essere impiegato in applicazioni che vengono utilizzate dalle persone.
Condividi ed estendere: Segnalibro con Del.icio.us | Digg it! | reddit!

Copyright © 2006-2012 Yahoo! Inc. Tutti i diritti riservati. Privacy Policy - Termini di servizio
Powered by WordPress su Yahoo! Web Hosting .
