WordPress funciona muy bien. Como desarrollador debería decir que no, que es un colador y esas cosas, pero no es cierto, funciona muy bien y el gestor de medios que implantaron en la versión 3.5 es el mejor que he visto. El punto flaco es su desproporcionado consumo de recursos; pero hay unos cuantos trucos y precauciones que hay que tener en cuenta para que no se convierta en un agujero negro de recursos. Con ellos se consigue mejorar el consumo de memoria RAM y liberar en gran parte la carga de procesador.
Este blog me ha servido de campo de pruebas para todos estos trucos y consejos, así que he comprobado que todos funcionan y suponen una mejora real.
- Deshabilitar la simulación de tareas Cron de WordPress (y usar un Cron real).
- Deshabilitar el versionado de post.
- Conocer el consumo real de memoria RAM.
- Usar sistema de cache (Quick Cache).
- Usar eAccelerator para PHP.
- Sobre Jetpack y otros.
1. Deshabilitar la simulación de tareas Cron de WordPress (y usar un Cron real).
WordPress tiene guardadas las acciones que se guardarían en un Cron en un archivo (wp-cron.php
), este archivo se ejecuta cada vez que alguien entra a una página o hace un click en la web. Aunque entre la versión 3.0.4 y la 3.1 hubo una mejora importante del consumo de recursos por este archivo, lo mejor es eliminarlos por completo. Lo que he hecho yo es hacer que se deje de ejecutar y ejecutarlo por mi cuenta cuando quiero usando una tarea Cron real.
Para deshabilitar el uso de wp-cron.php hay que editar el archivo wp-config.php
y colocar esta linea:
define('DISABLE_WP_CRON', true);
Se puede colocar donde se quiera, pero mejor en algún sitio que se pueda localizar con facilidad más adelante por si tuvieramos que quitarla.
Este archivo se encarga de buscar actualizaciones de los plugins, temas, el propio sistema y otras tareas que pueden encargarle terceros, por eso es importante mantenerlo, lo que he hecho yo es crear un cron especifico para este archivo, que hará que se ejecute 2 veces al día y no con cada visita.
Yo lo he hecho desde el panel de control cPanel, ahí es muy sencillo:
- Ir al panel de control y buscar la herramienta «Tareas Cron» en el bloque «Avanzado».
- Crear una nueva tarea (seleccionando la opción común «2 veces al día» y definiendo el comando siguiente:
/usr/bin/php -f /home/emmgfx/public_html/wp-cron.php >/dev/null
En wordpress.stackexchange.com hay unos gráficos donde se puede ver el consumo real de este archivo en las versiones 3.0.4 y 3.1.
2. Deshabilitar el versionado de post.
WordPress guarda un historial de cambios de cada página y post que gestiona, evidentemente si es una característica que valoras o necesitas, no desactives el versionado de post. En mi caso es algo innecesario y con tener algún que otro borrador para poder trabajar en artículos durante varios días, caso que se da pocas veces. Deshabilitarlo es muy sencillo, y así se evita una enorme sobrecarga de la base de datos que en muchos casos es innecesaria provoca unas consultas más lentas (más consumo de ram y procesador). No es un punto crucial, pero todo suma.
Sólo hay que abrir el archivo wp-config.php, el mismo que en el punto 1. y editar o añadir esta linea:
define(’WP_POST_REVISIONS’, false);
3. Conocer el consumo real de memoria RAM.
Conocer el consumo de memoria RAM puede servir para detectar en qué punto se está volviendo una aplicación lenta. La herramienta que he decidido utilizar yo de entre todas las que he probado, no es la más práctica ni la más cuidada, pero me ha servido y me da la información que necesito. Digo que no es la más práctica porque tengo que habilitar el plugin cuando lo voy a utilizar y desactivarlo cuando no lo necesito, pero eso es un mal menor a cambio de la información que ofrece (hay otro punto negativo, pero ese lo explicaré en el punto 4).
El plugin se llama Memory Viewer, desarrollado por el servicio de alojamiento InMotion. Cuando se activa aparecerá una tabla no demasiado estética al final de nuestra página, también al final del panel de administrador pero eso es menos importante ya que no hay motivos para preocuparse de optimizar el panel.
Esa tabla muestra información importante, el total de consumo al final de todas las ejecuciones, así como el consumo de cada ejecución especifica, puedes detectar un plugin que consume más de lo que pensabas o algún problema en tu plantilla. Por ejemplo yo vi que Jetpack consumía demasiado para mí y sólo lo utilizaba para la herramienta de estadisticas, así que lo desactivé y usé Google Analytics en su lugar (de esto hablo en el punto 6).
4. Usar sistema de cache (Quick Cache).
Este punto es crucial, hay que hacerlo aunque no tengas problemas de consumos o no hayan motivos aparentes. No es lo mismo servir una página en 500ms que en 1500ms, ni para el usuario (a menos que tengas publicidad que probable que el usuario no note problemas de velocidad) ni para las arañas de los motores de búsqueda, que valorarán negativamente los problemas de lentitud en tu página. Digamos que si tienes el mismo contenido que otra persona pero más lento, procurarán servir el más rápido porque en la práctica es mejor.
Quick caché funciona así: cuando un usuario entra en una de tus páginas busca un archivo de texto generado por el mismo plugin. Si no lo encuentra sirve la página como lo haría normalmente y la guarda en el archivo de texto que comentaba. La próxima vez que acceda a esa página en concreto se accederá al archivo generado, evitando decenas de consultas a la base de datos que pueden ser más o menos lentas, sirviendo el contenido mucho más rápido y costando muchos menos recursos.
No todo es oro, a veces puedes hacer cambios y según tu configuración no se verán aplicados hasta pasado un tiempo (1 día, 1 semana, depende de la configuración…) pero teniendo este incoveniente en mente no tiene por qué ser un problema. En el panel de administrador aparecerá un botón, Clear cache, que sirve para eliminar esos archivos generados provocando que el contenido se actualice inmediatamente y se vuelvan a generar poco a poco, de forma transparente para el usuario y para el administrador.
5. Usar eAccelerator para PHP.
Este punto no lo he notado tanto, pero como he dicho antes; todo suma. eAccelerator es otro sistema de caché, pero esta vez para scripts de PHP, lenguaje en el que está basado WordPress. La instalación dependerá básicamente del servicio de alojamiento que useis. En mi servidor por ejemplo ya está instalado y sólo hay que activarlo en el archivo php.ini. Mi recomendación es que intentes activarlo en el php.ini y luego mires mediante php_info(); si está funcionando correctamente.
extension = "eaccelerator.so"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.check_mtime="1"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.debug="0"
eaccelerator.enable="1"
eaccelerator.filter=""
eaccelerator.optimizer="1"
eaccelerator.shm_max="0"
eaccelerator.shm_only="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_size="16"
eaccelerator.shm_ttl="0"
Y para comprobar si está instalado, sólo hay que ejecutar un archivo .php cualquiera que contenga esto:
php_info();
6. Sobre Jetpack y otros.
Lo único que usaba de Jetpack es el sistema de estadísticas porque se integra muy bien y da una información útil pero más allá de eso no veo motivos para usarlo, y dándole vueltas al tema del consumo de RAM, Jetpack no es precisamente el plugin que menos consume, así que si sólo lo usas para estadísticas lo mejor es dejar de usarlo y utilizar Google Analytics para esa tarea Mientras que el antiguo wp-stats que acabó devorado por Jetpack consume tiempo y memoria del servidor local, Analytics se ejecuta de forma asíncrona (tiempo) y en los servidores de Google (memoria), además las estadísticas son mucho más extensas y ofrecen un detalle casi enfermizo sobre quien te visita. Desde donde, qué referido, que lenguaje, que sistema operativo, qué tiempo, qué rebote, que tiempo permanece, qué tipo de tráfico es, qué proveedor de servicios tiene, qué resolución de pantalla…
Yo utilizo el plugin Google Analyticator, aunque no es necesario utilizar ningún plugin para esto, pero te facilita unas estadísticas un tanto escuetas en el dashboard de administrador y ayuda a mantener separado este tema de la plantilla o diseño que se utilice.