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ários

XMLHttpRequest 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!

Hospedado por Yahoo!

Copyright © 2006-2012 Yahoo! Inc. Todos os direitos reservados. Política de Privacidade - Termos de Serviço

Powered by WordPress no Yahoo! Web Hosting .