Tempo de resposta de requisicao ajax

911 views
Skip to first unread message

Marcel Ferrante

unread,
Dec 8, 2014, 6:32:37 AM12/8/14
to go...@googlegroups.com
Pessoal,

estou fazendo uma requisicao ajax (similar a abaixo) que esta demorando um tempo consideravel (2-5s) sendo que a execucao do php é muito mais rapida (vide imagem).

$.ajax({
    type: "POST",
    url: "some.php",
}).done(function () {
echo "xxx"; 
});

Assim tenho 2 duvidas:

1) como debugar ou detalhar esse tempo de resposta da requisicao, para saber o tempo de latencia, execucao do jquery, etc ?

2) como otimizar essa consulta ajax para ficar mais rapido ?

Qualquer ajuda será valida.

Abs
Marcel


Imagem inline 2

--
Marcel Ferrante Silva
Professor Adjunto no Curso de Gestão da Informação - FIC / UFG
+55 62 8108-1277
skype: marcelferrante

Maykonn Welington Candido

unread,
Dec 8, 2014, 7:55:48 AM12/8/14
to go...@googlegroups.com
Bom dia,

Cara você pode usar os métodos .always(), .done(), .fail() e .then() para saber tentar entender o que está acontecendo e onde está levando mais tempo. Use também o parâmetro dataType do ajax pra dizer que tipo de resposta você espera receber do script php.


O que há no código PHP que é chamado? Tente usar microtime() no PHP pra responder pro ajax o tempo de execução do script php.

Atenciosamente,

Maykonn Welington Candido


--
Você recebeu esta mensagem porque está inscrito na Lista "GOPHP" em Grupos do Google.
Para Postar: go...@googlegroups.com
Para Sair do Grupo: gophp-un...@googlegroups.com
Link: http://groups.google.com/group/gophp?hl=pt-BR
---
Você recebeu essa mensagem porque está inscrito no grupo "GOPHP" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para gophp+un...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Arthur Cláudio Almeida Pereira

unread,
Dec 8, 2014, 4:57:22 PM12/8/14
to go...@googlegroups.com
Se estiver usando o Firefox utilize a ferramenta FireBug e caso esteja usando o Google Chrome use o ChromeDevTools. 
No caso do Firefox é necessário instalar uma extensão. 
Com essas ferramentas você consegue ver o tempo total da  requisição, ajax ou não, e até fazer profile do seu código javascript.

Marcel Ferrante

unread,
Dec 8, 2014, 7:06:41 PM12/8/14
to go...@googlegroups.com
Então Maykon, o microtime que estamos usando diz que o php esta gastando em torno de 0,5, 
mas a resposta no total esta gastante 3-4 segundos...

Arthur, o tempo total da requisição eu tenho, queria saber era o tempo gasto na rede (latência), tempo gasto no js, tempo gasto no servidor (php) e tempo gasto para o navegador interpretar e renderizar, ou seja, queria obter um detalhamento de uma consulta ajax através de jquery, para saber onde investir na otimização, mas vou tentar com o FireBug.

Vlw,
Marcel

Em 8 de dezembro de 2014 10:29, Maykonn Welington Candido <may...@outlook.com> escreveu:

Maykonn Welington Candido

unread,
Dec 9, 2014, 5:13:40 AM12/9/14
to go...@googlegroups.com
Que estranho cara. Tente simular uma chamada CURL com um outro arquivo PHP, só pra ver se tem essa latência também.

Atenciosamente,

Maykonn Welington Candido


caferrari

unread,
Dec 9, 2014, 6:06:32 AM12/9/14
to go...@googlegroups.com
Provavelmente seu problema está na hora de renderizar o HTML, você poderia colar aqui o trecho de código que renderiza o json para html?

Marcel Ferrante

unread,
Dec 9, 2014, 6:13:15 AM12/9/14
to go...@googlegroups.com
Ola,

acho mais facil eu postar o link. A requisicao ajax é feita ao clicar em algum check box a esquerda:


Se alguem tiver alguma sugestao de como melhorar, podemos conversar. Isso foi feito com wordpress+jquery.

Abs,
Marcel

Luís Henrique Faria

unread,
Dec 10, 2014, 6:30:28 AM12/10/14
to gophp
Ah, informações mais detalhadas do lado do front você também pode fazer na aba profiles do Chrome, mas antes de entrar por aí, veja se o problema não está no back-end ou na transmissão.
Dá uma checada também na forma como você está monitorando o tempo do PHP, às vezes deixou algum processo de lado sem querer e tal.

2014-12-10 9:18 GMT-02:00 Luís Henrique Faria <luish...@gmail.com>:
Aqui foi 1s, sendo 0.9s esperando o backend começar a responder.

De acordo com a imagem que vc mostrou a princípio, clique na request em questão e o chrome irá fornecer mais informações, incluindo uma aba de "timing" onde ele mostra exatamente onde esse tempo foi gasto.

Se está achando os tempos muito altos, vamos começar a analisar a partir daí.
Meça quanto tempo teu PHP demora pra processar a request em questão e compare com o TTFB apresentado pelo chrome (Time To First Byte). Se houver uma discrepância aí, hora de dar uma otimizada no webserver.

Se estiver legal, o chrome também mostra o tempo de download, daí você pode ou tentar em conexões mais rápidas, verificar se teu server está com conexão lenta, otimizar o tamanho da resposta, com compressão ou com consumo de um json pelo front, por exemplo...

Tem muita coisa que você pode ver/fazer, mas acredito que com essas dicas iniciais vc consegue começar.
Acredito que o firebug também dê essas informações todas, mas não consigo usar o Firefox, então não vou abrir pra ver haha



Luís Henrique Faria

unread,
Dec 10, 2014, 6:30:28 AM12/10/14
to gophp
Aqui foi 1s, sendo 0.9s esperando o backend começar a responder.

De acordo com a imagem que vc mostrou a princípio, clique na request em questão e o chrome irá fornecer mais informações, incluindo uma aba de "timing" onde ele mostra exatamente onde esse tempo foi gasto.

Se está achando os tempos muito altos, vamos começar a analisar a partir daí.
Meça quanto tempo teu PHP demora pra processar a request em questão e compare com o TTFB apresentado pelo chrome (Time To First Byte). Se houver uma discrepância aí, hora de dar uma otimizada no webserver.

Se estiver legal, o chrome também mostra o tempo de download, daí você pode ou tentar em conexões mais rápidas, verificar se teu server está com conexão lenta, otimizar o tamanho da resposta, com compressão ou com consumo de um json pelo front, por exemplo...

Tem muita coisa que você pode ver/fazer, mas acredito que com essas dicas iniciais vc consegue começar.
Acredito que o firebug também dê essas informações todas, mas não consigo usar o Firefox, então não vou abrir pra ver haha



2014-12-09 9:13 GMT-02:00 Marcel Ferrante <mar...@gmail.com>:

Leonn Leite

unread,
Dec 10, 2014, 11:33:53 AM12/10/14
to go...@googlegroups.com
Marcel,
deixe o mouse em cima da barra amarela, vai aparecer algo parecido com isso:

Imagem inline 2

o que pode estar acontecendo,  é que o conteúdo é muito grande (apesar de estar mostrando somente 135kb). E o que demora, de fato, é a renderização (seria algo como renderizar uma pagina comprida), já que você está usando o text/html


Acredito que o seu grafico, terá o Content Download maior que os demais. 

Atenciosamente,
Leonn Leite

Marcel Ferrante

unread,
Dec 10, 2014, 1:30:34 PM12/10/14
to go...@googlegroups.com
Ola Leonn,

vc matou a pau, é realmente o tamanho do html que esta avacalhando o tempo de resposta (abaixo).

Li em um site que para otimizar a requisicao ajax eu poderia retorna um xml/json 
ao inves do html, pq ai seria muito menor.

O servidor tambem é no exterior o que tb nao ajuda devido a latencia da rede (~250ms), mas fazer o que no Brasil é muito caro...



Abs
Marcel



Exibindo image.png
+55 62 8108-1277
skype:marcelferrante / gtalk:mar...@gmail.com

Luís Henrique Faria

unread,
Dec 10, 2014, 2:37:37 PM12/10/14
to gophp
​"Li em um site que para otimizar a requisicao ajax eu poderia retorna um xml/json 
ao inves do html, pq ai seria muito menor."

Não é tão preto no branco, na verdade.
Quando você usa a prop innerHTML para escrever o código diretamente o processo é mais rápido do que usar createElement() e companhia. Então receber o código HTML pronto é mais rápido que fazer o parse de um json e criar o HTML no client do ponto de vista da renderização. Quanto mais elementos, maior é a diferença de performance.

Vale notar que o tempo de renderização não vai diminuir apenas porque a quantidade de bytes transmitidos foi menor. Se você for criar os elementos no lado do cliente, este tempo tende a aumentar, na realidade, já que o CPU irá trabalhar mais para criar os elementos e tal.

Outras coisas podem estar influenciando isso aí. Vi que na request que fiz quando cliquei no checkbox, a resposta veio com javascript no topo, o que não é uma boa prática (talvez ele nem devesse estar por ali). Não olhei muito a fundo o código, mas aquele script também pode estar te atrasando sua renderização consideravelmente.

Dá pra entrar mais no assunto, mas acho que foge do escopo do grupo hehe.
Reply all
Reply to author
Forward
0 new messages