com a Declaração considerada prejudicial
11 de abril de 2006 às 7:52 pm por Douglas Crockford | Em Desenvolvimento | 64 Comentários JavaScript with declaração se destina a fornecer um atalho para escrever acessos recorrentes de objetos. Então, ao invés de escrever
ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing = true; ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang = true;
Você pode escrever
com (ooo.eee.oo.ah_ah.ting.tang.walla.walla) { bing = true; estrondo = true; }
Isso parece muito mais agradável. Exceto por uma coisa. Não há nenhuma maneira que você pode dizer, olhando para o código que bing e bang vai se modificou. Será ooo.eee.oo.ah_ah.ting.tang.walla.walla ser modificada? Ou será que as variáveis globais bing e bang destroçada? É impossível saber com certeza.
O with instrução adiciona os membros de um objeto para o escopo atual. Só se houver uma bing em ooo.eee.oo.ah_ah.ting.tang.walla.walla irá ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing ser acedida.
Se você não pode ler um programa e ter certeza de que você sabe o que vai fazer, você não pode ter confiança de que ele vai funcionar corretamente. Por esta razão, o with ficha deve ser evitada.
Felizmente, JavaScript também fornece uma alternativa melhor. Podemos simplesmente definir uma var .
var o = ooo.eee.oo.ah_ah.ting.tang.walla.walla; o.bing = true; o.bang = true;
Agora não há ambigüidade. Podemos ter confiança de que é ooo.eee.oo.ah_ah.ting.tang.walla.walla.bing e ooo.eee.oo.ah_ah.ting.tang.walla.walla.bang que estão a ser definido, e não alguma variáveis infeliz.
Compartilhar e ampliar: Bookmark com del.icio.us | digg it! | reddit!
Synchronous Asynchronous v
04 de abril de 2006 às 11:55 am por Douglas Crockford | Em Desenvolvimento | 26 ComentáriosXMLHttpRequest pode operar de forma síncrona ou assíncrona. Muitas pessoas preferem usá-lo de forma síncrona. Quando utilizado desta maneira, o motor de JavaScript é bloqueada até que a interacção com o servidor é completa. Porque ele bloqueia, o fluxo de controle se parece muito com uma invocação função comum. Complexidade temporal é abstraída, deixando um padrão de programação muito familiar e confortável. Ela funciona muito bem quando o servidor está na mesma máquina, ou próximo, na LAN. Infelizmente, ele pode fazer muito mal se o servidor estiver sob carga pesada, ou se o navegador está conectado ao servidor através de um link lento. Porque o mecanismo de JavaScript é bloqueado até que a solicitação for concluída, o browser irá ser congelado. O usuário não pode cancelar o pedido, não pode clique de distância, não pode ir para outra guia. Este comportamento é extremamente ruim.
Felizmente, XMLHttpRequest fornece uma opção para operação assíncrona. Quando você definir o asyncFlag bandeira a true , o motor de JavaScript não bloqueia. Em vez disso o pedido retorna imediatamente, com um potencial de acção que será desencadeada mais tarde, quando o resultado do pedido é conhecido. O Yahoo! Connection Manager fornece uma interface muito agradável para isso.
var CObj = YAHOO.util.Connect.asyncRequest ('GET', 'http://myservice.com?req=update', { success: function (resposta) { alert (response.responseText); }, falha: function (resposta) { alert (response.statusText); } });
Você fornece duas funções. O success da função contém tudo o que deve acontecer como resultado do pedido ser bem sucedido. Assim, se o pedido foi a obtenção de alguns JSON texto que deverá ser entregue ao app.update método, então o seu success função poderia ser
success: function (resposta) { app.update (eval ('(' + response.statusText + ')')); }
Programação assíncrona é um pouco mais complicado, porque a conseqüência de fazer um pedido é encapsulado em uma função em vez de seguir a declaração de pedido. Mas o comportamento em tempo real que as experiências de usuário pode ser significativamente melhor, porque eles não vão ver um servidor lento ou rede lenta com que o browser a agir como se tivesse caído. Programação síncrono é desrespeitoso e não deve ser utilizado em aplicações em que são usados pelas pessoas.
Compartilhar e ampliar: Bookmark com del.icio.us | digg it! | reddit!

Copyright © 2006-2012 Yahoo! Inc. Todos os direitos reservados. Política de Privacidade - Termos de Serviço
Powered by WordPress no Yahoo! Web Hosting .
