Os trabalhos cron do WordPress diminuem o carregamento da página?

8

Se um usuário visitar um site e sua visita acionar um trabalho cron bastante intenso, a velocidade de carregamento da página será mais lenta, certo? Pelo que entendi, a página não espera o trabalho do cron ser executado antes do carregamento, mas, como o trabalho do cron estaria sendo executado em paralelo, ainda é possível que a página carregue mais devagar, pois o servidor está ocupado, certo?

urok93
fonte
Leia sobre spawn_cron o que pode ajudá-lo: codex.wordpress.org/Function_Reference/spawn_cron
TomC:
Se o seu trabalho cron for pesado o suficiente para deixar o servidor ocupado, ele será pesado o suficiente para deixar o servidor ocupado. Não sigo exatamente qual é a sua pergunta - para confirmar isso?
Rarst
Sim, eu só queria confirmar isso, já que eu estava lendo essa página carrega e os trabalhos cron são executados de forma independente e, portanto, a carga da página não é afetada. No entanto, se você disser que o trabalho do cron é pesado o suficiente, isso afetará o carregamento da página como efeito colateral.
Urok93

Respostas:

10

Resposta curta - Não . Qualquer solicitação de página inicializa a fila agendada. É apenas uma solicitação de inicialização. A solicitação Wp-cron é uma solicitação independente.

solicitando o URL, /somepagevocê apenas inicializa a solicitação para/wp-cron.php

No entanto - se o evento cron não funcionar muito bem (ele tem consultas de 1000 db, por exemplo, ou está solicitando um recurso realmente muito demorado para responder), ou ambos, ou reprogramando o evento cron para cada solicitação ... como qualquer outro outro pedido de http consumirá recursos, desempenho da CPU, memória, etc ... se consumir recursos suficientes, sua página ficará mais lenta.

Oleg Butuzov
fonte
9

A resposta curta é realmente sim , na maioria dos casos.

Em primeiro lugar, na maioria das configurações, a geração de um trabalho cron gera um atraso de 1 segundo no carregamento da página, porque isso é feito através de uma solicitação HTTP de loopback com um tempo limite de 1 segundo - consulte https://wordpress.org/support/topic/save -a-segundo-completo-em-cron-execução / .

Em segundo lugar, o trabalho gerado agora estará competindo com o carregamento da página pelo acesso ao banco de dados (além de outros recursos). Vários processos podem ler o banco de dados simultaneamente; no entanto, sempre que um processo está gravando no banco de dados, por padrão, ele é bloqueado para impedir o acesso simultâneo de gravação ou leitura por qualquer outro processo - consulte /programming/1005206/does-sqlite-lock-the-database -file-on-read # answer-1005218 . O impacto disso depende da complexidade das atualizações do banco de dados da tarefa cron e de quanto tempo o banco de dados está realmente bloqueado e pode ser insignificante. Obviamente, também seria um problema se um trabalho cron estivesse em execução quando uma página fosse solicitada, mas ter trabalhos cron gerados na garantia de carregamento da página eles afetarão pelo menos o carregamento da página.

Se o seu servidor / hospedagem permitir, é recomendável configurar um trabalho agendado agendado para ser executado a cada poucas horas, com o comando

php -q /path/to/wp-cron.php

e desative a geração do cron no carregamento da página com a seguinte entrada em wp-config.php:

define('DISABLE_WP_CRON', true);
Jake
fonte
1
Esta é a verdadeira resposta.
ILikeTurtles
Segundo o artigo, o atraso de 1 segundo ocorre nas versões cURL abaixo de 7.15.5. Ele funciona bem nas versões curl a partir da 7.15.5 e acima. O 7.15.5 foi lançado em agosto de 2006. Não existe mais um tempo limite de 1 segundo, exceto em configurações realmente antigas.
user63350
@ user63350 Isso é verdade no cURL, mas não no WordPress. Do artigo: "a classe WP_Http_Curl ajusta o tempo limite fracionário para um segundo completo (mesmo que o cURL o suporte)". Mesmo no WordPress mais recente (5.2.2), o tempo limite ainda é de 1 segundo; portanto, o problema está presente em todas as configurações, incluindo as mais recentes.
29419 Jake
Na verdade, o tempo limite de 1 segundo foi corrigido no WordPress 4.6 por # 33055 . (Olhando para o código base é confuso como o código antigo ainda está lá, incluindo privatemétodos como WP_Http::_dispatch_requestque estão agora nunca ligou.)
Jake