# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Optimización de WordPress (III): los Plugins


Siguiendo con los artículos de optimización de WordPress voy a indicar los que a mi parecer son los plugins más importantes en WordPress.

Hay que tener en cuenta que los plugins suelen ser el principal problema de utilización de recursos en WP, así que cuantos menos tengamos, mejor. Por eso conviene escoger con mucho cuidado los plugins a utilizar. Estos son los que personalmente recomiendo:

  • Clean Options Limpia de la base de datos restos de plugins antiguos y registros innecesarios en la tabla options, una de las más importantes de WP y que afectan directamente al rendimiento del sitio.
  • WP-Optimize: Permite optimizar la base de datos con un solo click así como eliminar revisiones de entradas y cambiar el nombre de usuario admin por uno personalizado.
  • WP Super Cache: Sin duda alguna el plugin más importante que existe en WordPress para sitios con una cantidad importante de visitas.
  • Akismet: Este plugin ya viene por defecto en WP y permite que tu blog no se llene de comentarios SPAM.

En relación con optimización estos son los cuatro plugins esenciales (a mi parecer). Por supuesto para otros objetivos como el SEO habría que seleccionar algún plugin más (WordPress Related Posts, All in One SEO Pack…).

Artículos anteriores sobre optimización de WordPress:

Optimización de WordPress: las cabeceras, fichero header.php

Optimización de WordPress: el fichero .htaccess

Optimización de WordPress (II): el fichero .htaccess


El fichero oculto .htaccess se utiliza en servidores web Apache, se encuentra en la raíz de nuestro sitio web y en él podemos configurar una serie de directivas de Apache sin necesidad de ser configuradas a nivel global en el servidor.

Entre otras cosas, podemos configurar sistemas de autenticación, url’s amigables, compresión del sitio web, etc. Para optimizar nuestro WordPress hoy añadiremos lo siguiente en dicho fichero:

Activación de caché por Apache con los módulos mod_expires y mod_headers

Antes de nada tenéis que aseguraros que el servidor web apache bajo el que está vuestro sitio web tiene compilados los módulos mod_expires y mod_headers.

El funcionamiento de este sistema es que podemos decir al navegador de la gente que visita nuestra web que ciertos ficheros (normalmente imagenes, css, javascript, etc) pueden ser cacheados durante un tiempo determinado. Si añadís el siguiente código al fichero .htaccess le diréis a los navegadores que cacheen durante un mes esos ficheros. Esto supone que la segunda vez que esta persona acceda a vuestra página no tendrá que volver a descargar las imágenes, css, javascript, etc lo que implica menor uso de transferencia de datos y mayor velocidad en el acceso web:

ExpiresActive On
ExpiresDefault A0
# expiracion de 1 mes para archivos estaticos
<FilesMatch "\.(gif|jpg|jpeg|png|swf|js|css|ico)$">
ExpiresDefault "access plus 1 months"
</FilesMatch>

Activación de compresión por Apache con el módulo mod_deflate

El módulo de Apache (apache 2) mod_deflate permite que el contenido que el servidor proporciona al cliente final (usuario) sea comprimido antes de ser enviado a través de la red. Esto supone que el tamaño de los datos enviados será mucho menor y por consiguiente la carga será más rápida. Hay que tener en cuenta que en ciertos servidores y ciertos tipos de web la activación de este sistema puede hacer que el uso de recursos en el servidor aumente así que conviene probarlo con cautela.

Para activarlo tendríais que añadir lo siguiente a vuestro fichero .htaccess, veréis que le decimos que sirva comprimidos los ficheros html, css y javascript:

# BEGIN GZIP
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
</ifmodule>
# END GZIP

Enlace al artículo anterior:

Optimización de WordPress: las cabeceras, fichero header.php

Optimización de WordPress (I): el fichero header.php


En esta serie de artículos intentaré ofrecer unos cuantos consejos para optimizar en la medida de lo posible aquellos blogs que utilizan WordPress.

Uno de los puntos flojos de WordPress es su excesivo uso de cpu, memoria y recursos de servidor en general, sobre todo con la inclusión de plugins, temas, etc. En este artículo vamos a empezar optimizando el fichero que genera la cabecera HTML del blog, header.php.

El objetivo de estos cambios es reducir el número de consultas MySQL y ejecución de llamadas PHP al servidor, haciendo lo más estática posible la cabecera de nuestro blog. Para ello, evitaremos que se llame a la base de datos para buscar el nombre del blog, la ubicación de los css, javascript o feed.

Lo primero que debemos hacer es encontrar el fichero header.php, que se encontrará en la carpeta del tema que usemos. Los temas están en la ruta “/wp-content/themes/”, en nuestro caso vamos a trabajar con un tema que se llama stardust, así que la ruta del fichero header.php es:

/wp-content/themes/stardust/header.php

Comenzamos con las modificaciones, empezamos configurando el título del blog de forma estática, eliminando la llamada php, que lo busca en la base de datos MySQL:

Antes:

<title><?php bloginfo('name'); ?><?php wp_title(); ?></title>

Después:

<title>Este es el título de mi blog</title>

Cambiamos también las declaraciones meta y el charset de la página, que siempre será igual (aunque no sepáis para que sirve, es seguro hacer este cambio):

Antes:

<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />

Después:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

La siguiente línea la podemos eliminar directamente:

<meta name="generator" content="WordPress <?php bloginfo('version'); ?>" /> <!-- leave this for stats please -->

Las llamadas a las rutas de los ficheros de estilos css también podemos configurarlas directamente:

Antes:

<link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_url'); ?>" media="screen" />

Después:

<link rel="stylesheet" type="text/css" href="/wp-content/themes/stardust/style.css" media="screen" />

Nota: Si no sabéis la ruta exacta al fichero css, podéis buscarlo por FTP (se llama style.css) dentro de la carpeta de vuestro tema o en el navegador pulsar Ctrl+U para ver el código fuente y buscar la línea anterior.

También podemos llamar de forma estática al fichero favicon.ico, que es el icono de favoritos y la página:

Antes:

<link rel="shortcut icon" href="<?php bloginfo('template_url'); ?>/favicon.ico" />

Después:

<link rel="shortcut icon" href="/wp-content/themes/stardust/favicon.ico" />

La URL para los pingback va a ser siempre la misma, con lo que también podemos modificara:

Antes:

<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />

Después (cambiad miblog.es por vuestro blog):

<link rel="pingback" href="http://miblog.es/xmlrpc.php" />

También podemos configurar como estáticas las rutas a los ficheros javascript que utilicemos en el blog. Esto depende de cada blog y la ruta en la que estén, para orientaros, será algo así:

Antes:

<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/miscript.js"></script>

Después:

<script type="text/javascript" src="/wp-content/themes/stardust/js/miscript.js"></script>

Con estos cambios hemos reducido drásticamente las llamadas php/mysql al servidor y por consiguiente aligerado en gran medida la rapidez de carga de nuestra web y su uso de recursos. Hay que tener en cuenta que cada tema puede variar y tener diferentes llamadas php, es cuestión de retocar la cabecera investigando el fichero según sus necesidades.

Plugin optimizado para artículos relacionados en WordPress


Hasta el momento, los plugins más utilizados y reconocidos para mostrar artículos relacionados en las entradas de WordPress eran YARP (Yet Another Related Posts) y WordPress Related Posts.

wordpress

La gran diferencia de este nuevo plugin (Efficient Related Posts) con sus predecesores es estos procesan la lista de artículos relacionados al vuelo, es decir, cuando el usuario visita la página. Esto implica que estas consultas SQL que generan los artículos relacionados se ejecute cientos de veces y de forma innecesaria, con el consiguiente uso de CPU en el servidor y bajada de rendimiento de la velocidad del blog.

Efficient Related Posts genera los artículos aleatorios de un modo mucho más optimizado. Este listado se genera a través de la zona de administración, en el momento que publicamos el post. Tenemos la opción de seleccionar los artículos a mostrar. De este modo, logramos que estas consultas MySQL se generen una única vez y sin afectar al usuario que visita la página.

Sitio oficial del plugin: Efficient Related Posts

cforms WordPress Plugin: evitar que el CSS y JavaScript cargue en todas las páginas


Cforms es un plugin de creación de formularios muy potente y versatil para WordPress. Si sueles ser muy meticuloso con la cantidad de CSS o Javascript que cargan tus webs hay una forma de evitar que se carguen los de este plugin en todas las páginas de entradas, tags, etc

Por defecto cargará su javascript y css automáticamente en todas las páginas con el siguiente código:

&lt;!-- Start Of Script Generated By cforms v11.1 [Oliver Seidel | www.deliciousdays.com] --&gt;
&lt;link rel="stylesheet" type="text/css" href="http://rm-rf.es/wp-content/plugins/cforms/styling/cforms.css" /&gt;
&lt;script type="text/javascript" src="http://rm-rf.es/wp-content/plugins/cforms/js/cforms.js"&gt;&lt;/script&gt;
&lt;!-- End Of Script Generated By cforms --&gt;

Bien, para optimizarlo y que únicamente sea cargado en las páginas que tienen un formulario, tenemos que ir a nuestra administración de WordPress, sección Cforms > Global Settings y en la parte que indica “Include Cforms header data only on specific pages” añadimos los ID de las páginas con formulario.

Specify the ID(s) of pages or posts separated by comma on which you’d like to show cforms. The cforms header will only be included specifically on those pages, helping to maintain all other pages neat.

Los ID de las páginas/entradas los podéis ver al editar una entrada en concreto o pasando el ratón sobre el link de “editar” o “edición rápida de la entrada”.

WordPress 2.7 Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes) in class-snoopy.php


En uno de mis blogs he notado este error a la hora de publicar o borrar noticias, ha sido justo al actualizar a la versión 2.7 de Wordpress. Existen varias formas de solucionarlo:

Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes) in class-snoopy.php on line 894

  1. Aumentar el límite de memoria que un script PHP puede utilizar en el php.ini del servidor:
  2. memory_limit = 16M ; Maximum amount of memory a script may consume (16MB)
  3. Si utilizas el plugin Google XML Sitemaps, revisa la solución al problema publicada por el propio autor.
  4. Modificar el script php class-snoopy.php, en el que puedes aumentar el límite de memoria, añade la siguiente línea de código sobre la línea 894 ($_data = fread($fp, $this->maxlength);) y aumenta el valor de memoria a 32 Mb por ejemplo:
  5. ini_set('memory_limit','32M'); // Añade esta línea
    $_data = fread($fp, $this->maxlength);

Actualizar a WordPress 2.7


Ya está aquí la nueva versión 2.7 de WordPress, viene con bastantes cambios de apariencia y funcionalidad a nivel de dashboard, os dejo un vídeo en el que se pueden observar todas estas novedades. La actualización es tán sencilla como las anteriores, puedes descargarlo y encontrar la guía de actualización/instalación en este enlace.