Problema Performance AJAX

Ola,

Estou exibindo um lista em uma página através do AJAX e verifiquei que ele esta meio “lento” para fazer o parser do XML, comparado ao parser feito por um programa Java.
Alguém poderia me dar uma dica para “turbinar” a exibição da lista. Ou se existe outra forma de fazer a exibição da lista ?
A lista poderá conter até 500 registros. Abaixo trecho do código.

for(i=0;i<req.responseXML.getElementsByTagName(“documento”).length;i++){

achouDoc = true;
var documento = req.responseXML.getElementsByTagName(“documento”)[i];

var numero = getElementContent(documento,“numero”,0);>

Em vez de retornar um XML você poderia retornar um “stringão” em JSON e transformar ele um array usando “eval()”.

Mauricio,

Obrigado por responder …

Entendi a sua dica … Agora só não consegui entender como implementar esta sugestão, alias, nunca tinha ouvido falar no JSON…
Visitei o site do JSON mas honestamente não entendi o funcionamento.
Vc tem algum exemplo simples só para eu ter uma base ?

Obrigado
Renato.

Você viu isso aqui? -> http://www.json.org/js.html

Valeu Mauricio.

Dei uma pesquisada na NET, e achei este artigo.
http://www.developer.com/lang/jscript/article.php/10939_3596836_1
Neste artigo, o autor faz uma comparação entre o parser XML e o uso do JSON.
Agora vou implementar … como a XML é um pouco complexo, vai dar um trampo …

Obrigado.
Renato

Utilizei o Json e ficou muito mais lento … Vou ver a possibilidade de montar o html direto no responseText…

Defina “lento”?

eu nunca usei esse JSON, mas o que levou você a achar que estaria mais lento ? Cuidado, o S.O. podia não estar oferencendo todos os recursos de memória pra você no momento do seu teste :wink:

Estou considerando a aplicação “lenta”, pois comparando a uma listagem feita por um programa desktop, ficou muito mais lento a busca.
Neste caso, os dados retornam muito rápido do banco, porém, a demora esta exclusivamente no JavaScript, seja na hora de fazer o parser XML, ou utilizando o JSON. Nos testes, o JSON foi mais lento que o parser XML.

Quanto aos recursos do S.O., não procede, pois a minha máquina é um Pentium 4, 3.06 com 1 GB de RAM, portanto, sobra máquina … também tenho que considerar que as máquinas que irão utilizar a aplicação não serão tão boas quanto a minha…

Só lembrando, a busca só é lenta quando retorna mais de 1500 registros…

Se vc disse q a lista pode conter até 500 registros, e a busca só é lenta quando retorna mais de 1500 registros, pq vc não faz o parse apenas dos 500 primeiros ?

 for(i=0;i&lt;req.responseXML.getElementsByTagName("documento").length;i++){ 

Credo em cruz! Normalmente eu faria algo como:

var nDocumentos = req.responseXML.getElementsByTagName ("documento").length;
for (i = 0; i &lt; nDocumentos; i++)

Quem disse que chamar a função "getElementsByTagName" é barato? Digamos que essa função lhe retorne 1500 elementos, e leve 4 ms para ser executada. Ela será chamada 1500 vezes - ou seja, levará 6 segundos só para testar contra o valor "fixo" 1500.

Não sei o que o pessoal tem contra criar variáveis temporárias.
Muitas vezes criar uma variavelzinha temporária (principalmente quando é a condição de um for) salva seu dia.

Outro lugarzinho…

 var documento = req.responseXML.getElementsByTagName("documento")[i];

Em vez disso, faça algo como:

// fora do loop
var documentos = req.responseXML.getElementsByTagName("documento"); 
var nDocumentos = documentos.length;
...
// dentro do loop
 var documento = documentos[i];

O raciocínio é exatamente o mesmo. Se houver muitos documentos, essa função irá demorar bastante, e se ela for chamada muitas vezes, ela irá “cozinhar” a CPU do seu computador.

Pois é pessoal…
Já li algumas pessoas falando de ótima performance na utilização de JSON, e outras nem tanto…

Quais são as experiências de vocês? De fato, algumas aplicações que fiz, obtive um ganho considerável utilizando JSON ao invés de XML com AJAX…

Flw!