Por Fernando el May 31, 2016 07:09 am 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: 00:29:30 "GET /wp-admin/index.php "http://dominio.com/wp-admin/index.php" 00:30:31 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:32:03 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:33:03 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:34:03 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:35:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:36:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:37:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:38:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:39:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:40:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:42:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:44:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:46:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:47:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:48:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:49:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:50:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:51:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:53:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:55:08 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:57:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 00:59:04 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 01:01:05 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 01:03:05 "POST /wp-admin/admin-ajax.php "http://dominio.com/wp-admin/index.php" 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: //Desactivar Heartbeat API add_action( 'init', 'stop_heartbeat', 1 ); function stop_heartbeat() { wp_deregister_script('heartbeat'); } 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: - 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”: ¿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. Verlo en el navegador » Por Fernando el May 30, 2016 05:45 pm ¿En serio no sabes que hay WordCamp en Marbella? Pues corre que te quedas sin disfrutar del sol, la playa, sus bellezas … Uisss perdón, de una agenda WordPress completísima De verdad, quedan pocos días, y ya está cubierto el panel de ponencias, que quedará como sigue: Como puedes comprobar hay para aprender mucho y bueno … - WordPress multilenguaje
- Diseño de producto
- Protección de datos
- Optimización
- Ganar dinero
- Dónde alojar tu web
- Montar una tienda online
- El futuro de WordPress
Y de la mano de grandes cracks como Abel Sutilo, Andy García, Mercedes Romero, Andrés Cifuentes, Rafa Poveda, Antonio Felipe Martín, Beatriz Lavela, Camino García, Rubén Alcalá, Antonio Torres o Roberto Miralles. Venga, arrea, que estás a tiempo de apuntarte a un día glorioso en el que aprender, compartir, hacer WordPress. ¿Dónde? Aquí: https://marbella.wordcamp.org/2016/entradas/ ¡Ah! ¿qué además quieres colaborar con un patrocinio a medida de tus posibilidades? Pues aquí: https://marbella.wordcamp.org/2016/llamada-patrocinadores/ Verlo en el navegador » Artículos recientes:
|