avec la Déclaration Considered Harmful
11 avril 2006 à 07:52 par Douglas Crockford | En développement | 64 commentaires JavaScript with déclaration était destinée à fournir un raccourci pour écrire accède à des objets récurrents. Alors au lieu d'écrire
ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing = true; ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang = true;
Vous pouvez écrire
avec (ooo.eee.oo.ah_ah.ting.tang.walla.walla) { bing = true; Bang = true; }
Cela ressemble beaucoup plus agréable. Sauf pour une chose. Il n'ya aucun moyen que vous pouvez dire en regardant le code qui bing et bang aurez modifiées. Will ooo.eee.oo.ah_ah.ting.tang.walla.walla être modifié? Ou les variables globales bing et bang soient faussés? Il est impossible de savoir à coup sûr.
L' with instruction additionne les membres d'un objet à la portée actuelle. Seulement si il ya un bing dans ooo.eee.oo.ah_ah.ting.tang.walla.walla sera ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing être consulté.
Si vous ne pouvez pas lire un programme et être sûr que vous savez ce qu'il va faire, vous ne pouvez pas avoir confiance que cela va fonctionner correctement. Pour cette raison, la with déclaration devrait être évitée.
Heureusement, JavaScript fournit également une meilleure alternative. Nous pouvons simplement définir une var .
var o = ooo.eee.oo.ah_ah.ting.tang.walla.walla; o.bing = true; o.bang = true;
Maintenant il n'ya aucune ambiguïté. Nous pouvons avoir confiance que ce n'est ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing et ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang qui sont ensemble, et non pas quelque variables d'infortunés.
Partager et prolonger: Conservez ce lien avec del.icio.us | Digg it! | reddit!
Synchrone Asynchrone c.
4 avril 2006 à 11:55 par Douglas Crockford | En développement | 26 commentairesXMLHttpRequest peut fonctionner de manière synchrone ou asynchrone. Beaucoup de gens préfèrent l'utiliser de manière synchrone. Lorsqu'il est utilisé de cette façon, le moteur JavaScript est bloqué jusqu'à l'interaction avec le serveur est terminée. Parce qu'il bloque, le flux de contrôle ressemble beaucoup à une invocation de la fonction ordinaire. La complexité temporelle est abstraite, laissant un modèle de programmation très familier et confortable. Il fonctionne particulièrement bien lorsque le serveur est sur la même machine, ou à proximité sur le LAN. Malheureusement, il peut exécuter très mal si le serveur est sous une charge lourde, ou si le navigateur est connecté au serveur via une liaison lente. Parce que le moteur JavaScript est bloqué jusqu'à ce que la demande complète, le navigateur sera gelé. L'utilisateur ne peut pas annuler la demande, ne peut pas cliquer loin, ne peut pas aller dans un autre onglet. Ce comportement est extrêmement mauvaise.
Heureusement, XMLHttpRequest fournit une option pour un fonctionnement asynchrone. Lorsque vous définissez la asyncFlag drapeau pour true , le moteur JavaScript ne bloque pas. Au lieu de la demande retourne immédiatement, avec un potentiel d'action qui sera déclenchée plus tard, lorsque le résultat de la requête est connue. L' Yahoo! Connection Manager offre une interface très agréable pour cela.
var = cObj YAHOO.util.Connect.asyncRequest ('GET', 'http://myservice.com?req=update', { succès: la fonction (réponse) { alert (response.responseText); }, échec: la fonction (réponse) { alert (response.statusText); } });
Vous fournissez deux fonctions. Votre success fonction contient tout ce qui doit arriver comme résultat de la demande de réussir. Donc, si la demande était d'obtenir une certaine JSON texte qui doit être livré à l' app.update méthode, alors votre success fonction pourrait être
succès: la fonction (réponse) { app.update (eval ('(' + + response.statusText')')); }
Programmation asynchrone est légèrement plus compliqué parce que la conséquence de faire une demande est encapsulée dans une fonction au lieu de suivre la déclaration demande. Mais le comportement en temps réel que l'expérience utilisateur peut être nettement mieux, car ils ne verront pas d'un serveur du réseau lent ou atone amener le navigateur à agir comme si elle s'était écrasé. Programmation synchrone est irrespectueux et ne doivent pas être utilisés dans des applications qui sont utilisées par les gens.
Partager et prolonger: Conservez ce lien avec del.icio.us | Digg it! | reddit!

Copyright © 2006-2012 Yahoo! Tous droits réservés. Politique de confidentialité - Conditions d'utilisation
Propulsé par WordPress sur Yahoo! Hébergement Web .
