Heartbeat API ¿la necesito?

No sé si recordarás que en WordPress 3.6 se introdujo la conocida como Heartbeat API, con el objetivo de facilitar la vida del redactor, pues añadía medidas de protección de tus publicaciones como guardarlas cada 15 segundos mientras escribes o cada 2 minutos si no realizas ninguna acción.

Además, también es útil para, por ejemplo, mostrar a otros autores que se está editando una entrada o página en la pantalla de entradas o páginas, o para llevar el registro de las revisiones mientras escribes.

El nombre de la API viene de que funciona como un latido de corazón (heartbeat = latido de corazón) pues hace “ticks” al servidor cada x tiempo para comprobar que está activo tu WordPress o si hace “cosas”, y en este caso el corazón es el escritorio de tu WordPress. De ahí que te muestre si alguien está editando algo, que guarde cada cierto tiempo lo que escribes, etc., gracias a esos latidos, esos “ticks”.

Ahora bien, esto tiene sus pegas, y es que esta API consigue todo eso haciendo constantes peticiones del tipo POST, y consumo de los recursos de tu servidor gracias a esa “vigilancia” que realiza cada 15 segundos en el editor, o de cada 2 minutos. Cada “latido” pesa 98 bytes, que aunque a priori te parezca poco va sumando.

Además, la Heartbeat API utiliza la biblioteca /wp-admin/admin-ajax.php para mantener esas conexiones activas, hacer lo que llama los “ticks”, y realizar consultas o cargas automáticas de información en tu escritorio. Mediante llamadas AJAX desde el navegador mantiene actualizado tu escritorio con la información que comentaba antes.

Una simple llamada GET a la API genera un montón de peticiones POST, como en este ejemplo:

Como puedes comprobar, cada 15 segundos se genera una petición del tipo POST, para que tú no pierdas tu preciada escritura.

Y además, cada petición POST genera una ejecución PHP, con un alto consumo de la CPU de tu servidor.

Entonces ¿es buena la Heartbeat API?

Pues claro, la idea es cojonuda, sobre todo si recuerdas que WordPress es un sistema multiusuario, y es totalmente relevante controlar de algún modo que nadie edite una misma publicación (u otras cosas en el futuro, como widgets, etc) para evitar desastres.

El problema viene del desconocimiento, pues imagina que tus redactores no conocen de su existencia, pues para ellos es puramente una ventaja, y dejan sus navegadores abiertos, con entradas a medio terminar, y se van a comer ¿qué pasa?

Pues que estás consumiendo CPU del servidor sin necesidad ya que la Heartbeat API hará sus “ticks” para comprobar si alguien edita algo, quiere editar algo, mantener abiertas las sesiones, hacer autoguardados, etc.

Toda potencia conlleva consumo ¿no lo sabías?

¿Necesito la Heartbeat API

Esta es la primera pregunta que debes hacerte, respondiendo a cuestiones como las siguientes:

  • ¿Necesito el autoguardado del editor?
  • ¿Necesito el control de revisiones en tiempo real?
  • ¿Necesito que los usuarios sepan si alguien está editando otra entrada?
  • ¿En qué medida las necesito?

Si has contestado negativamente a alguna de estas preguntas necesitas anular o al menos controlar la Heartbeat API.

¿Cómo desactivo la Heartbeat API?

Pues sencillo, simplemente añade este código a tu plugin de personalizaciones:

Si lo prefieres también puedes añadirlo al archivo functions.php del tema activo, pero recuerda que si cambias de tema o se actualiza el archivo automáticamente perderías los cambios, y para este tipo de modificaciones es mejor usar tu propio plugin.

Pero ¿y si no quiero desactivar la Heartbeat API sino simplemente limitar algo su comportamiento? ¿se puede?

¿Cómo limito la Heartbeat API?

Se puede, se puede. Mira por donde – y sí, me terminaré haciendo una camiseta que diga… – hay un plugin exactamente para eso.

Se llama Heartbeat Control.

Una vez activo, en su página de ajustes, puedes definir dónde y cómo limitar la Heartbeat API.

Por un lado podrás especificar dónde dejarás ejecutarla, a saber:

heartbeat-control-ajustes 1

  • Dejar que funcione por defecto
  • Desactivarla en todos sus usos
  • Desactivarla solo en el escritorio
  • Solo permitir su uso en el editor

Y, a continuación, definir los tiempos entre “ticks”:

heartbeat-tiempo ajustes 1

¿Y sin plugin?

Como nos pedía Jhon en los comentarios, también puedes pre-configurar cada cuanto tiempo hace los latidos la HeartBeat API con un código, para no tener que instalar un plugin si ya tienes claro cada cuantos segundos quieres que funcione.

Si es tu caso simplemente añade este código a tu plugin personalizado:

En el código simplemente usamos el filtro heartbeat_settings de la API Heartbeat para cambiar el intervalo entre 15 y 60 segundos (no más ni menos), en el ejemplo puesto a 60 segundos, que es lo que pedíais en los comentarios.

¿De verdad también tengo que tocar esto? Tela con WordPress y “sus cosas”

Me lo dicen mucho: “Joder Fernando, mira que das consejos para optimizar y asegurar WordPress, yo pensaba que WordPress era eficiente ¿de verdad tengo que meter todos esos códigos que publicas?

Vamos a ver, tú decides cómo optimizas tu sitio, y tus prioridades, pero yo te plantearía, en este caso, que si tu web solo la gestionas tú ¿de verdad quieres estar consumiendo recursos y CPU de tu servidor sin necesidad? ¿no prefieres dejar esos recursos para el consumo normal de la web por parte de los visitantes y no tener que migrar a un hosting superior porque – amablemente – te echen del actual?

Ea, pues eso, a darle una pensada y tomar decisiones ahora que dispones de la información.

AVISO: esta publicación es de hace dos años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado.

Valora este artículo para mejorar la calidad del blog ...

Al hacer una valoración se recoge una cookie con la IP de tu dispositivo

FlojitoNo está malEstá bienMe ha servidoFantástico (17 votos, promedio: 4,65 de 5)
Cargando…

Autor: Fernando Tellado

Fernando Tellado, apasionado de WordPress, profesor, consultor y ponente. Maquero cansino, padre de tres hijos y de una perrita Beagle, Bilbaíno de nacimiento, Español de corazón y ciudadano de donde me quieran. Autor del libro WordPress - La tela de la araña. Mi blog personal es Navegando con red, donde he crecido como escritor en la red y ofrezco mis visiones acerca de la Web 2.0 y la blogosfera.

Comparte esta entrada en
468 ad

Pin It on Pinterest

Share This