Problema Performance AJAX

11 respostas
R

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);>

11 Respostas

Mauricio_Linhares

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

R

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.

Mauricio_Linhares

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

R

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

R

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

cv1

Defina “lento”?

Fabricio_Cozer_Marti

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:

R

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…

C

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 ?

T
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.

diegovic

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!

Criado 20 de abril de 2006
Ultima resposta 2 de jul. de 2006
Respostas 11
Participantes 7