Les tâches cron WordPress ralentissent-elles le chargement des pages?

8

Si un utilisateur visite un site et que sa visite déclenche un travail cron assez intensif, la vitesse de chargement des pages sera plus lente pour lui, n'est-ce pas? Si je comprends bien, la page n'attend pas que le travail cron s'exécute avant de se charger, mais comme le travail cron s'exécutera en parallèle, il se peut que la page se charge plus lentement car le serveur est occupé, n'est-ce pas?

urok93
la source
Prenez connaissance de spawn_cron qui pourrait vous aider: codex.wordpress.org/Function_Reference/spawn_cron
TomC
Si votre tâche cron est suffisamment lourde pour occuper le serveur, elle est suffisamment lourde pour occuper le serveur. Je ne comprends pas vraiment quelle est votre question - pour le confirmer?
Rarst
Oui, je voulais juste le confirmer, car j'ai lu que les chargements de page et les tâches cron s'exécutaient indépendamment et que le chargement de page n'était pas affecté. Cependant, si vous dites que le travail cron est suffisamment lourd, cela affectera le chargement de la page comme effet secondaire.
urok93

Réponses:

10

Réponse courte - Non . Toute demande de page initialise la file d'attente planifiée. C'est juste une demande d'initialisation. La demande Wp-cron est une demande autonome.

afin de demander l'URL, /somepagevous venez d'initialiser la demande/wp-cron.php

Cependant - Si l'événement cron ne fonctionne pas très bien (il contient par exemple 1000 requêtes de base de données ou demande une ressource très longue à répondre), ou les deux, ou re-programmation de l'événement cron pour chaque demande ... comme n'importe quel autre autre requête http il consommera des ressources, des performances CPU, de la mémoire, etc ... s'il mange suffisamment de ressources, votre page deviendra plus lente.

Oleg Butuzov
la source
9

La réponse courte est en fait oui , dans la plupart des cas.

Tout d'abord, sur la plupart des configurations, la génération d'un travail cron entraîne un délai de 1 seconde au chargement de la page, car cela se fait via une demande HTTP de bouclage avec un délai d'expiration de 1 seconde - voir https://wordpress.org/support/topic/save -une seconde pleine d'exécution sur cron / .

Deuxièmement, le travail généré sera désormais en concurrence avec le chargement de la page pour l'accès à la base de données (ainsi que d'autres ressources). Plusieurs processus peuvent lire la base de données simultanément; cependant, chaque fois qu'un processus écrit dans la base de données, il est verrouillé par défaut pour empêcher l' accès en écriture ou en lecture simultané par tout autre processus - voir /programming/1005206/does-sqlite-lock-the-database -file-on-reads # answer-1005218 . L'impact de cela dépend de la complexité des mises à jour de la base de données du travail cron et de la durée pendant laquelle la base de données est réellement verrouillée, et peut être insignifiante. Bien sûr, ce serait aussi un problème si un travail cron était en cours d'exécution lorsqu'une page est demandée, mais avoir des travaux cron générés sur les garanties de chargement de page ils affecteront au moins ce chargement de page.

Si votre serveur / hébergement le permet, il est recommandé de configurer un travail cron planifié pour s'exécuter toutes les quelques heures, avec la commande

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

et désactivez la création de cron au chargement de la page avec l'entrée suivante dans wp-config.php:

define('DISABLE_WP_CRON', true);
Jake
la source
1
Telle est la vraie réponse.
ILikeTurtles
Selon l'article, le délai de 1 seconde se produit sur les versions cURL inférieures à 7.15.5. Cela fonctionne très bien sur les versions curl de 7.15.5 et supérieures. 7.15.5 a été publié en août 2006. Il n'y a plus de délai d'expiration de 1 seconde, sauf pour les configurations vraiment très anciennes.
user63350
@ user63350 C'est vrai pour cURL mais pas pour WordPress. De l'article: "la classe WP_Http_Curl ajuste le délai d'attente fractionnaire à une seconde complète (même si cURL le prend en charge)". Même dans la dernière WordPress (5.2.2), le délai d'expiration est toujours de 1 seconde, donc le problème est présent dans toutes les configurations, y compris la toute dernière.
Jake
En fait, le délai d'expiration de 1 seconde a été corrigé dans WordPress 4.6 par # 33055 . (Regarder la base de code est source de confusion car l'ancien code est toujours là, y compris des privateméthodes comme celles WP_Http::_dispatch_requestqui ne sont plus jamais appelées.)
Jake