¿Los trabajos cron de WordPress ralentizan la carga de la página?

8

Si un usuario visita un sitio y su visita desencadena un trabajo cron que es bastante intenso, la velocidad de carga de la página será más lenta para él, ¿verdad? Según tengo entendido, la página no espera a que se ejecute el trabajo cron antes de cargarse, pero dado que el trabajo cron se estaría ejecutando en paralelo, aún podría darse el caso de que la página cargue más lentamente ya que el servidor está ocupado, ¿verdad?

urok93
fuente
Lea sobre spawn_cron que podría ayudarlo: codex.wordpress.org/Function_Reference/spawn_cron
TomC
Si su trabajo cron es lo suficientemente pesado como para hacer que el servidor esté ocupado, entonces es lo suficientemente pesado como para hacer que el servidor esté ocupado. No entiendo cuál es tu pregunta, ¿para confirmar eso?
Rarst
Sí, solo quería confirmar eso, ya que he estado leyendo que la página se carga y los trabajos cron se ejecutan de forma independiente, por lo que la carga de la página no se ve afectada. Sin embargo, si usted dice que el trabajo cron es lo suficientemente pesado, afectará la carga de la página como un efecto secundario.
urok93

Respuestas:

10

Respuesta corta - Nop . Cualquier solicitud de página inicializa la cola programada. Es solo una solicitud de inicialización. La solicitud Wp-cron es una solicitud independiente.

así que solicitando URL /somepagesolo inicializa la solicitud a/wp-cron.php

Sin embargo, si el evento cron no funciona realmente bien (tiene 1000 consultas db, por ejemplo, o solicita un recurso realmente muy largo para responder), o ambos, o reprograma el evento cron para cada solicitud ... como cualquier otro otra solicitud http consumirá recursos, rendimiento de la CPU, memoria, etc., si consume suficientes recursos, su página se volverá más lenta.

Oleg Butuzov
fuente
9

La respuesta corta es en realidad , en la mayoría de los casos.

En primer lugar, en la mayoría de las configuraciones, la generación de un trabajo cron incurre en un retraso de 1 segundo en la carga de la página, porque se realiza a través de una solicitud HTTP de bucle invertido con un tiempo de espera de 1 segundo; consulte https://wordpress.org/support/topic/save -a-full-second-on-cron-ejecución / .

En segundo lugar, el trabajo generado ahora competirá con la carga de la página por el acceso a la base de datos (así como otros recursos). Múltiples procesos pueden leer la base de datos simultáneamente; sin embargo, cada vez que un proceso está escribiendo en la base de datos, por defecto está bloqueado para evitar el acceso simultáneo de escritura o lectura por cualquier otro proceso; consulte /programming/1005206/does-sqlite-lock-the-database -file-on-reads # answer-1005218 . El impacto de esto depende de cuán complejas sean las actualizaciones de la base de datos del trabajo cron y durante cuánto tiempo esté realmente bloqueada la base de datos, y puede ser insignificante. Por supuesto, también sería un problema si un trabajo cron se ejecutara cuando se solicita una página, pero tener trabajos cron generados en la carga de la página garantiza afectarán al menos esa carga de página.

Si su servidor / hosting lo permite, se recomienda configurar un trabajo cron programado para que se ejecute cada pocas horas, con el comando

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

y deshabilite el desove cron en la carga de la página con la siguiente entrada en wp-config.php:

define('DISABLE_WP_CRON', true);
Jake
fuente
1
Esta es la verdadera respuesta.
ILikeTurtles
Según el artículo, el retraso de 1 segundo ocurre en las versiones de cURL inferiores a 7.15.5. Funciona bien en las versiones curl de 7.15.5 y superiores. 7.15.5 se lanzó en agosto de 2006. Ya no hay un tiempo de espera de 1 segundo, excepto en configuraciones realmente muy antiguas.
user63350
@ user63350 Eso es cierto para cURL pero no para WordPress. Del artículo: "la clase WP_Http_Curl ajusta el tiempo de espera fraccional a un segundo completo (incluso si cURL lo admitiría)". Incluso en la última versión de WordPress (5.2.2), el tiempo de espera es de 1 segundo, por lo que el problema está presente en todas las configuraciones, incluida la más reciente.
Jake
En realidad, el tiempo de espera de 1 segundo fue corregido en WordPress 4.6 por # 33055 . (En cuanto a la base de código es confuso ya que el código de edad todavía está allí, incluyendo privatemétodos como WP_Http::_dispatch_requestlos que están ahora nunca llamó.)
Jake