• Resolved Fábio

    (@fabiopulitta)


    Fala Claudio,
    demorei pra identificar de onde é que vinha tanta lentid?o, mas resolvi fazer o teste padr?o de desativar todos os plugins e ir ativando e percebi que é no WooCommerce Correios que o problema aparece. Explicando o caso:

    O problema:
    Uso ajax para incluir produtos no carrinho (sem ajax da na mesma). Quando clico, demora entre 14-17s pra obter resposta e o bot?o mudar para “ver carrinho”.

    O que notei.
    A lentid?o só acontece se estou logado. Se um novo usuário entra no site e come?a a incluir produtos no carrinho, a resposta é ok, de 1,5s.

    Desativando o plugin, o problema desaparece. Eu nunca tinha notado o problema. talvez alguma mudan?a nas últimas atualiza??es?

    Alguma ideia?

    Vlw!

    The page I need help with: [log in to see the link]

Viewing 10 replies - 1 through 10 (of 10 total)
  • Plugin Support Alex Koti

    (@alexkoti)

    Oi Fábio,

    Confira se a op??o “Modo de depura??o” está ligado, pode ser ele que está interferindo. Essa op??o fica em “WooCommerce > Configura??es > aba Entrega > sub Op??es de entrega”

    De qualquer forma, dê uma conferida no log de erros para ver se está registrando algo.
    https://codex.www.ads-software.com/Debugging_in_WordPress#WP_DEBUG_LOG

    Thread Starter Fábio

    (@fabiopulitta)

    Obrigado pela resposta Alex,
    De fato, estava ativo a depura??o, mas mesmo desativando, n?o mudou nada. Ativei a depura??o e n?o há qualquer men??o de erro relacionado ao plugin. Existem outros warnings do woocommerce que est?o aparecendo aos montes ultimamanete de fun??es depreciadas, mas mesmo assim n?o parecem ter rela??o com o problema.

    Thread Starter Fábio

    (@fabiopulitta)

    Vamos lá… colhi mais alguns dados, agora usando o Query Monitor:

    Eu achei que o problema era apenas nas chamadas com o add-to-cart com ajax na home, mas acontece qdo adiciono um produto diretamente na página do produto em si.

    Veja o que ele me mostra quando adiciono um produto. Aqui levou certa de 25s até finalizar o carregamento, sendo que 23s é do correio.

    Veja nessa imagem: https://camaleoa.com/chamada-correios.png

    Curiosamente, se eu fa?o a chamada na API, a resposta é bem rápida. Abaixo est?o as duas para teste:

    Essa é a primeira, que demora 20s
    https://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?nCdServico=04669&nCdEmpresa=14448769&sDsSenha=12966706&sCepDestino=05414001&sCepOrigem=06612280&nVlAltura=2&nVlLargura=11&nVlDiametro=0&nVlComprimento=16&nVlPeso=1,5&nCdFormato=1&sCdMaoPropria=N&nVlValorDeclarado=0&sCdAvisoRecebimento=N&StrRetorno=xml

    E essa é a segunda, que demora 2s
    https://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?nCdServico=04162&nCdEmpresa=14448769&sDsSenha=12966706&sCepDestino=05414001&sCepOrigem=06612280&nVlAltura=2&nVlLargura=11&nVlDiametro=0&nVlComprimento=16&nVlPeso=1,5&nCdFormato=1&sCdMaoPropria=N&nVlValorDeclarado=0&sCdAvisoRecebimento=N&StrRetorno=xml

    Algum ideia de onde vem essa lentid?o?

    Plugin Support Alex Koti

    (@alexkoti)

    Oi Fábio!
    Ent?o eu imagino que possa ser algum problema na class WP_Http ( https://codex.www.ads-software.com/HTTP_API ), que é do core do WP, eu sei que ela tenta diversos métodos de requisi??o externa, considerando vários ambientes php.

    Olhando no fonte o wp_safe_remote_get() vai acabar chamando essa classe e utilizando o método request() na linha 148 ( https://developer.www.ads-software.com/reference/classes/wp_http/ )

    Um teste que pode ser feito seria o seguinte, utilizar os vários filtros que existem nessa classe e salvar o time em que ele é executado, e comparar os valores para achar em qual momento do código está acontecendo a lentid?o. Um exemplo simples:

    
    add_filter( 'http_request_args', 'test_http_1', 10, 2 );
    function test_http_1( $r, $url ){
        error_log( 'hook http_request_args: ' . time() , 0);
        return $r;
    }
    
    add_filter( 'http_response', 'test_http_2', 10, 3 );
    function test_http_2( $response, $r, $url ){
        error_log( 'hook http_response: ' . time() , 0);
        return $r;
    }
    

    O error_log() vai salvar no arquivo /wp-content/debug.log
    Existem vários filtros nessa classe, teria ir testando até achar o ponto de gargalo.

    Esse código teria que ser colocado num plugin seu, pois n?o tenho certeza de que ele daria certo apenas colocando no functions.php do tema.

    Thread Starter Fábio

    (@fabiopulitta)

    O esperado é algo assim?

    Inclui esses filtros que vc sugeriu no functions.php mesmo.
    Aí no debug veio esses tempos:

    [09-Nov-2017 04:51:35 UTC] hook http_request_args: 1510203095
    [09-Nov-2017 04:51:46 UTC] hook http_response: 1510203106
    [09-Nov-2017 04:51:46 UTC] PHP Notice: Undefined index: response in /home/puravida/public_html/wp-content/plugins/woocommerce-correios/includes/class-wc-correios-webservice.php on line 558
    [09-Nov-2017 04:51:46 UTC] hook http_request_args: 1510203106
    [09-Nov-2017 04:51:49 UTC] hook http_response: 1510203109
    [09-Nov-2017 04:51:49 UTC] PHP Notice: Undefined index: response in /home/puravida/public_html/wp-content/plugins/woocommerce-correios/includes/class-wc-correios-webservice.php on line 558

    Aí dei uma olhada no request e escolhei um dos filtros pra testar novamente. Foi o abaixo:

    add_filter( ‘pre_http_request’, ‘test_http_3’, 10, 3 );
    function test_http_3( $response, $r, $url ){
    error_log( ‘hook pre_http_request: ‘ . time() , 0);
    return $r;
    }

    Agora o comprar responde em 2 a 2,5s. Só por ter colocado esse filtro pre_http_request
    Estou deixando tudo pronto para a requisi??o antes de fazer ela?
    Faz sentido? o_O

    Edit: A inclus?o no carrinho é rápida, porém descobri que o pedido n?o calcula mais o frete e n?o passa nenhum pedido por isso. N?o funcionou.

    • This reply was modified 7 years, 3 months ago by Fábio.
    Plugin Support Alex Koti

    (@alexkoti)

    O add_filter sempre precisa retornar o primeiro argumento que recebe, os outros s?o auxiliares.

    Por exemplo nesse
    $pre = apply_filters( 'pre_http_request', false, $r, $url ); será aplicado os filtros associados ao ‘pre_http_request’, e ele espera o valor filtrado(ou n?o) do primeiro argumento que nesse caso é o false. Se olhar o código fonte, verá que logo em seguida ele verifica se esse valor de $pre é false. Por isso foi mais rápido, mas n?o deu certo, pois o valor retornado n?o era no formato correto.
    Esse caso específico é meio confuso pois o valor inicial é false.

    De qualquer forma, pelos tempos ali do log deu 11 segundos entre ‘http_request_args’ e ‘http_response’, que é o retorno de fato da url ??

    Uma coisa que seria possível tentar é nesse mesmo filtro pre_http_request realizar o pedido da url via cURL e retornar o array no modelo necessário(explicado nas linhas 229-246 da class WP_Http)

    Inclusive, creio que seja uma boa você fazer um teste pedindo diretamente a url dos urls via cURL, sem passar pelo wordpress, para conferir se n?o está tendo lentid?o nele.

    Thread Starter Fábio

    (@fabiopulitta)

    Opa Alex,
    ainda n?o testei essa última ideia sua, mas me ocorreu uma coisa.

    Atualmente n?o uso FastCGI no servidor. Tive que usar certas configura??es que n?o s?o compatíveis com ele. Poderia ser este um motivo?

    Thread Starter Fábio

    (@fabiopulitta)

    Bingo, Alex.

    O problema todo era o fato de n?o estar usando FastCGI no servidor.

    Plugin Support Alex Koti

    (@alexkoti)

    Que bom que deu certo! Essa é uma informa??o importante, vou ver se é possível adicionar isso na descri??o do plugin

    Thread Starter Fábio

    (@fabiopulitta)

    Sim, caso resolvido depois das configura??es alteradas.

    Obrigado pela ajuda.

    abs

Viewing 10 replies - 1 through 10 (of 10 total)
  • The topic ‘Add to Cart extremamente lento quando plugin dos correios ativo’ is closed to new replies.