¿Existe un equivalente al Batch API de Drupal en WordPress?

2

Me pregunto si hay algún tipo de equivalente a API de lote de Drupal en WordPress?

Básicamente, la API le permite registrar una solicitud de lote y Drupal llamará su función una y otra vez (con solicitudes de Ajax) hasta que finalice su lote. Entonces, si necesita realizar una actualización complicada en 1,000,000 de publicaciones, puede hacerlo en un lote sin tener que agotar el tiempo de espera de PHP o quedarse sin memoria. (Solo tienes que decirle a Drupal qué tan avanzado estás y actualizará la barra de progreso para el usuario, etc.)

Necesito hacer algo similar en WordPress (realizar un gran lote en el backend de WordPress sin la línea de comandos). ¿Cómo lograrías esto?

    
pregunta David Barratt 16.10.2014 - 16:41

2 respuestas

2

No, no existe una API de este tipo, pero si desea una, puede:

  • Constrúyelo tú mismo
  • Abre un ticket en WP Core Trac

Pero dejando eso de lado, si necesitas eliminar, crear o actualizar 1 millón de publicaciones o una escala similar, hacerlo a través de la interfaz no es bueno, incluso con una barra de progreso potenciada por AJAX.

Los complementos de terceros han implementado cosas similares a esto, pero no de una forma genérica. No hay un plugin 'solicitud de ajax por lotes genérico'. Un ejemplo serían los complementos del regenerador de miniaturas.

En el futuro, puede ser mejor usar la próxima API REST para realizar sus solicitudes. Luego puede hacer sus solicitudes de javascript y cambiar las publicaciones en lotes o 1 por 1, e implementar su barra de progreso.

Como desarrollador que ha trabajado con Managed WordPress hosting

Dudo que WP Engine esté contento con esto, ni su cliente (1 millón de solicitudes para actualizar publicaciones, 1 millón de visitas, eso es una gran cantidad de visitas a un servicio que utiliza visitas para determinar los precios). Por lo tanto, lo que usted proponga será potencialmente costoso en términos de $ $, $ 1 por cada 1000 aciertos en los precios de excedentes, dudo que su cliente esté satisfecho

Entonces, a menos que esté en el paquete empresarial WP Engine con millones de visitas, podría ser:

  • Negocios! 400k hits, 600,000 / 1000 = $ 600 por el primer millón eliminado + $ 1k por cada millón adicional, + tráfico / 1000
  • profesional! 100k hits, 900,000 / 1000 = $ 900 por el primer millón eliminado + $ 1k por cada millón adicional, + tráfico / 1000
  • personal! 25,000 visitas, 975,000 / 1000 = $ 900 por el primer millón eliminado + $ 1k por cada millón adicional, + tráfico / 1000

Puede costar más o menos en otros servicios de WordPress administrados, pero sigue siendo una propuesta arriesgada, especialmente si no funciona bien la primera vez y necesita repetir el proceso

Pero incluso si ignora los precios, esas son muchas solicitudes, y las solicitudes llevan tiempo. Incluso si toman una pequeña cantidad de tiempo, eso se suma. Tu barra de progreso estará esperando un rato ...

Lo que haría

En lugar de eso, sería mejor bajar el sitio localmente, ejecutar sus comandos usando WP CLI y luego cargar la nueva base de datos. Usted tiene un repositorio git con su código, tiene acceso a SFTP, tiene PHPMyAdmin para la base de datos, se puede hacer. Incluso la mayoría de los hosts compartidos de $ 1pm brindan estas facilidades.

No necesita acceso SSH cuando puede ubicarlo en un entorno totalmente bajo su control, y la descarga y la carga serán mucho más rápidas que cientos de miles de solicitudes AJAX.

¡Como bonificación, obtendrá una copia actualizada y actualizada del contenido en vivo!

    
respondido por el Tom J Nowell 27.10.2014 - 16:07
2

No tengo ni idea de por qué querrías hacer algo así. Supongamos que el tiempo de ping al servidor es de 100 ms (el mío suele ser peor), esto significa que con el simple AJAX que envía, espera la respuesta y luego vuelve a enviar, las solicitudes de 1M tardarán 100 mil segundos, más de un día. Si puedes enviar 10 en cada momento, lo reducirás a aproximadamente 3 horas, pero básicamente harás un DOS contra el sitio.

El único punto que puedo ver al hacer algo así en AJAX es hacer que un humano observe lo que está sucediendo y manejar eventos inesperados, pero cuando el proceso toma más de una hora, nadie querrá usar este tipo de método. .

La forma correcta de manejar esa necesidad es usando el cron de wordpress. Haga un lote e inmediatamente programe un evento para ejecutar el siguiente. Eso será mucho más rápido sin ninguna demanda irrazonable de ejecución de php o memoria si escribes correctamente el proceso.

    
respondido por el Mark Kaplun 27.10.2014 - 17:15

Lea otras preguntas en las etiquetas