El desempeño de un blog siempre debe ser bueno, de lo contrario los visitantes, que generalmente tienen poca paciencia, pueden abandonar el sitio si detectan algún tipo de carga lenta o tiempos muy largos de espera. Es importante mantener el rendimiento a tope, actualizando y mejorando las configuraciones que se tienen en varios aspectos (configuración de Hardware, optimización de la base de datos, etc).
Midiendo tiempos de carga
El tiempo necesario para que un sitio se descargue completamente en el navegador del usuario es una métrica común para medir el desempeño. Entre menos tiempo tome la carga del sitio, mejor. Incluso Google, dentro de las herramientas para Webmaster hace hincapié en el factor de la velocidad, que últimamente se está convirtiendo en un factor sensible para muchos.
Pingdom Tools
Pues bien, hay varias formas de medir el tiempo de carga de un sitio. A mi en lo particular me gusta usar Pingdom Tools, que mediante una gráfica detallada de cada objeto nos permite saber el tamaño (en KB) de un sitio, así como el tiempo promedio de carga. En caso de que haya un elemento como una imagen o un script, que se demoren demasiado en cargar, es fácil identificar cuál es el problema.

Este servicio es gratuito y muy completo, es por eso que se ha convertido en uno de mis preferidos, sobretodo por la cantidad tan detallada de información que es posible obtener mediante el uso de esa herramienta.
Page Speed
Page Speed es un complemento para Firebug (una extensión para Firefox) que permite crear análisis sobre el desempeño de un sitio. Esta extensión de Google ha venido a sustituir a YSlow, un complemento similar desarrollado por Yahoo que aún tiene gran aceptación entre la comunidad.

Al ejecutar esta prueba, se analiza el sitio que se está visitando y a continuación se listan algunos puntos: los que están bien desarrollados, los que necesitan algunas modificaciones ligeras y los que definitivamente requieren un gran cambio para mejorar el desempeño. El puntaje total se obtiene en una escala del 0 al 100, en donde el 100 representa un sitio perfectamente optimizado, lo cual es por demás difícil de conseguir. Es una excelente herramienta para identificar y corregir posibles errores. Por ejemplo, en el caso de tecnokun se muestra 82 de 100 puntos.
Algunas recomendaciones hechas por Page Speed son:
- Minimizar las llamadas a DNS (incluír menos widgets, botones, iframes, etc.)
- Agregar fecha de expiración para el cache de los elementos.
- Combinar archivos CSS externos.
- Servir archivos estáticos desde un dominio que no implemente cookies.
- Usar eficientemente los selectores CSS.
Aunque son buenas recomendaciones, no todas son técnicamente la mejor solución. Por ejemplo, el uso de selectores “eficientes” en las definiciones de las hojas de estilo requiere asignarle una clase a cada elemento de un sitio, algo poco práctico. Además la semántica del código es más difícil de conservar puesto que se recomienda omitir declaraciones obvias o generales.
Mostrar el número de consultas y el tiempo de carga
Se puede incluir un pequeño snippet que permita conocer el número de consultas que se hacen a la base de datos así como el tiempo que toma esta operación. Mediante este código que se inserta en el pie de página se puede obtener dicha información.
<?php echo get_num_queries(); ?> consultas en <?php timer_stop(1); ?> segundos.Si bien el uso de este snippet es una solución práctica para usarse en forma de debug, hay que tomar en cuenta que desplegar esta información requiere una consulta a la base de datos, por lo que es recomendable desactivar el código cuando no se está haciendo una depuración o mejoras al sitio.
Hosting

El Hardware es una de las partes más importantes, ya que es un factor determinante en cuanto al rendimiento de un sitio, por no decir que es el factor más importante. Dependiendo del número de visitas que tenga un sitio, es oportuno contratar un servidor que vaya de acuerdo a dichas exigencias. Por lo regular se ofrecen tres tipos de alojamiento web en función de las necesidades de cada persona:
- Hosting compartido (shared): es un servidor subdividido para alojar más o menos a 100 clientes al mismo tiempo. Si se tiene un sitio con poco tráfico, un hosting compartido es más que suficiente.
- VPS (Servidor Privado Virtual): al igual que un alojamiento compartido, se trata de un servidor pero dividido entre 20 personas o menos. De esta forma hay más recursos disponibles además de algunos beneficios como la posibilidad de instalar software según las necesidades del usuario.
- Servidor dedicado: se trata de un servidor completo a tu disposición. Mucha mayor cantidad de recursos disponibles; la desventaja es el precio que puede ser de varios cientos de dólares al mes.
De acuerdo a los proveedores que he usado, te puedo compartir algunas opiniones que tengo al respecto:
La lista de recomendados
- MediaTemple (Shared) – Mi experiencia fue agradable aquí; tienen un panel muy bonito y un soporte técnico muy bueno, la desventaja es que la comunicación es en Inglés. Incluso las cuentas de hosting compartido tienen características geniales como acceso por SSH o incluso SVN. Son muy flexibles cuando tu sitio crece demasiado y te recomiendan opciones viables. Los precios empiezan en $20 USD/mes, dependiendo de las características.
- LiquidWeb (VPS): uno de los mejores proveedores que he usado. Tienen un soporte técnico bastante bueno y muy rápido, además de que los servidores son realmente rápidos. Los precios empiezan en $60 USD/mes pero tienes la confianza y seguridad de que tienes a uno de los mejores proveedores que hay.
- KnownHost (VPS): muy buena experiencia aquí, ya que el soporte es muy amigable y rápido además de que los precios son más accesibles. Comenzando en $25 USD/mes puedes obtener un buen servicio de hosting a un precio muy competitivo. Es de los mejores servicios que he probado y lo recomiendo.
- WiredTree (VPS): con este proveedor llevo poco tiempo pero estoy muy contento con el servicio. El soporte es rapidísimo, el más rápido que he visto, ya que en menos de 5 minutos contestan tus inquietudes. El desempeño del servidor es increíble y la interfaz es muy buena. Se está postulando como uno de mis servicios favoritos, en verdad es bueno.
- HostGator (Shared): si buscas un hosting shared bueno y confiable, ese está en HostGator. Es el proveedor más serio y confiable de alojamiento compartido que he encontrado. Miles de usuarios lo recomiendan también y tiene precios muy accesibles, desde $4.95 USD mensuales.
- BanaHosting (shared): tiene precios similares a los de HostGator y muy buenas características. El soporte es un poco lento porque al parecer solo son 2 personas las encargadas de todo el departamento. Tuve pequeños problemas de rendimiento y decidír mudarme a HostGator, pero eso no quita que BanaHosting sea un buen proveedor de alojamiento compartido.
La lista negra

- Dreamhost: es la peor empresa por la que he pasado. Si bien te prometen hosting a un precio de risa, cuidado porque en cualquier momento te borran tu sitio. Puedes leer aquí lo que me pasó. Mi sitio estuvo offline casi dos semanas y ni siquiera podía acceder a los archivos de respaldo de la base de datos. Un EPIC FAIL para Dreamhost, así que no lo recomiendo en absoluto.
- Dattatec: si ves el nombre Dattatec, aléjate. Así de simple: pésimo servicio, pésimo soporte, cargos fantasma, tiempo offline interminable. En pocas palabras, si quieres un alojamiento serio, no busques en Dattatec.
Si quieres más opiniones sobre otros proveedores de hosting, te recomiendo que leas este hilo en Forobeta en donde muchos usuarios dan su opinión. También puedes leer este otro hilo en donde hay más recomendaciones.
Descuentos en planes de Hosting
Para los que buscan códigos de descuento (o cupones de descuento, como les quieras llamar) existe un buen sitio para buscar ofertas, sobretodo si se trata de empresas de Estados Unidos. En WebHostingTalk puedes encontrar una sección de ofertas en donde cientos de empresas ofrecen cupones y promociones con las cuales puedes ahorrar una buena cantidad de dinero así que te recomiendo que te des una vuelta por ese sitio antes de contratar cualquier servicio.
Configuración y optimización del servidor
Existen muchas formas de optimizar el servidor, de manera que realice sus funciones normales pero con la ventaja de consumir menos recursos. Por ejemplo, estas son algunas cosas que se pueden hacer para mejorar el desempeño:
- Cambiar el servidor Apache por uno más ligero como Nginx o Lighttpd.
- Actualizar a la versión más reciente de PHP.
- Actualizar a la versión más reciente de Apache (si es el servidor http que deseas utilizar).
- Eliminar servicios innecesarios para liberar más memoria RAM.
Cachear las consultas MySQL
WordPress hace un uso intensivo de las comunicaciones con la base de datos (MySQL). Es por eso que cachear las consultas es una actividad inteligente que puede ayudar a mejorar significativamente el desempeño de un sitio. Para hacer dichos ajustes se debe modificar el archivo my.cnf (en el directorio etc/). Esto ayudará a disminuir los tiempos de ejecución de las consultas.
Agrega estas líneas a tu archivo my.cnf:
query_cache_type = 1
query_cache_limit = 2M
query_cache_size = 20M
Una vez que hayas hecho los cambios deberás reiniciar el servicio de MySQL para que las modificaciones tengan efecto.
Incrementar el número de conexiones permitidas en Apache
Al aumentar el número máximo de conexiones permitidas, el desempeño puede mejorar ya que el servidor tiene la capacidad de atender a más usuarios al mismo tiempo. Sin embargo la desventaja es que entre más conexiones se permita, mayor cantidad de memoria RAM se requiere, así que para personas que están en un servidor limitado es mejor hacer pruebas incrementando de a poco el número máximo de conexiones, como por ejemplo, de 50 en 50. Para cambiar este parámetro se tiene que editar el archivo httpd.conf y agregar esta línea:
max_connections = 150Optimizar el código y las imágenes
Una vez que el servidor ha sido optimizado, es turno de modificar el código (Theme de WordPress) para que use eficientemente los recursos.
Desactivar el hotlinking
El hotlinking es una práctica que consiste en cargar imágenes en un servidor, desde otro servidor ajeno, lo cual no es del todo correcto. Al cargar imágenes se usan recursos del servidor y además ancho de banda, así que esencialmente al permitir el hotlinking dejamos la puerta abierta para que se aprovechen de nuestros recursos (algunas personas lo hacen sin saber que es malo, pero otras lo hacen con toda la premeditación). Para evitar estos problemas, debes agregar estas líneas a tu archivo .htaccess y reemplazar example.com con tu propio dominio:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/.*$ [NC]
RewriteRule .*\.(gif|jpg|png|ico)$ - [F,L]
Usar un hosting de imágenes
Al utilizar un servidor externo para alojar y servir las imágenes, se reduce significativamente la carga del servidor. Se pueden usar sitios como Photobucket o Flickr para esta tarea, aunque hay que ser muy cuidadosos con esto ya que si se guardan todas las imágenes en un servicio que luego desaparece, tendremos grandes problemas. Un buen proveedor de servicios sería el servicio Simple Storage (Amazon S3) que funciona bajo la condición paga lo que uses.

Un blog exitoso llamado Digital Inspiration de hecho realizó el cambio de todas sus imágenes a Amazon S3; aquí puedes leer el caso práctico en donde se usan servidores externos para alojar imágenes. Para sitios de alto tráfico, la cuenta mensual de Amazon puede resultar grande, así que hay que hacer pruebas primero antes de mover todo el contenido a los servidores de Amazon.
Comprimir los archivos JavaScript
Al eliminar todos los espacios en blanco y comentarios, se obtiene una versión más ligera de un archivo, lo que se refleja en un tiempo de carga menor y en menos recursos ocupados en el servidor. Esto resulta especialmente bueno en sitios con mucho tráfico, en donde unos mínimos cambios como estos pueden ahorrar GB de transferencia al mes. Hay muchas herramientas dedicadas a este fin, una de ellas es JavaScript Compressor; sólo hay que pega el código original para obtener una versión reducida del mismo.
Colocar el código JavaScript al final de la página
A veces el tiempo de carga de un sitio puede ser afectado al llamar un script desde un sitio que está offline o con problemas de ejecución. Para evitar este tipo de inconvenientes hay que colocar todo el código JavaScript al final de la página (en el footer o pie de página) y si por alguna razón esto no se puede hacer, los scripts externos deben ser colocados en un iFrame para evitar tiempos de espera largos.
Cachear en el navegador del usuario
Para archivos que se cargan con más frecuencia, como imágenes y hojas de estilo, es recomendable que se guarde una copia en el navegador del usuario; si bien esto no hace más rápida la carga del sitio, ayuda a reducir la carga del servidor ya que tiene menos peticiones que atender.
Comprimir archivos estáticos
Al enviar datos comprimidos (que luego el navegador descomprime) se reduce el tiempo necesario para que la página termine de cargar ya que la cantidad de datos enviada es menor. Para activar esta opción, es necesario modificar el archivo .htaccess y agregar las siguientes lineas:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
Usar una CDN o un subdominio para archivos estáticos
El uso de una CDN incrementa el desempeño e un sitio, ya que se trata de una especie de hosting externo para archivos. Al usar una Red de Distribución de Contenido, se guarda una copia de un archivo en muchos clusters al rededor del mundo, y cuando un usuario solicita dichos archivos, el clúster más cercano al usuario es el que se encarga de enviar la información.

Al agregar un subdominio se aprovechan mejor las descargas paralelas; es decir que en lugar de descargar todos los archivos de un mismo sitio, es mejor distribuir el contenido en múltiples dominios para que el navegador descargue el contenido al mismo tiempo desde las diferentes fuentes. De esta forma no tiene que esperar a que se descargue un archivo para comenzar a descargar el siguiente. Puedes leer más sobre descargas concurrentes en donde se explica mejor la ventaja de esta práctica que es ampliamente usada por personas al rededor del mundo.
WordPress
Es posible mejorar el desempeño de WordPress mediante la aplicación de unas ciertas técnicas que harán que el sitio funcione más eficientemente.
Actualizar a la última versión
Al tener la versión más reciente de WordPress instalada se minimizan riesgos de seguridad, ya que muchos usuarios prueban y reportan fallas potencialmente peligrosas. Además, la versión más reciente de WP contiene mejoras en el desempeño ya que la comunidad de desarrolladores se enfoca mucho en este punto.
Desactivar las revisiones de posts
A partir de la versión 2.6 de WordPress, cada vez que un post se autoguarda, también se almacena en la base de datos. A esto se le conoce como revisiones de posts, las cuales pueden aumentar el tamaño de la base de datos innecesariamente y al no ser un elemento indispensable, se puede desactivar para ahorrar espacio. Para remover la función de revisiones, en el wp-config.php agrega esta línea:
define('WP_POST_REVISIONS', false);
También se pueden borrar los rastros de las revisiones de posts pasados mediante una consulta SQL que se debe ejecutar desde PHP MyAdmin:
DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'
Es importante que hagas una copia de respaldo de tu base de datos antes de aplicar cualquier modificación, sólo por precaución.
Desactivar la papelera
A partir de WordPress 2.9 se incorporó una nueva característica llamada papelera, en donde se almacenan comentarios y entradas borradas. Si después de un tiempo (30 días) no las borras, WordPress se encarga automáticamente de borrar el contenido. Si quieres desactivar esta nueva opción de enviar comentarios y posts primero a la papelera, debes editar el wp-config.php y agregar esta línea
define('EMPTY_TRASH_DAYS', 0 );
Reducir el número de consultas
WordPress cuenta con algunas funciones para obtener información sobre el sitio. Por ejemplo, al desarrollar un theme es común ver código similar al siguiente:
<a href="<?php echo get_bloginfo('url');?>">Inicio</a>
Al llamar a la función get_bloginfo() se hace una consulta a la base de datos. Si se hace lo mismo muchas veces, el servidor termina recibiendo varias peticiones que se podrían ahorrar. En vez de usar dicha función, podemos colocar el enlace con la URL de nuestro blog, ahorrando consultas. Por ejemplo:
<a href="http://tecnokun.com">Inicio</a>
El resultado producido es exactamente el mismo; un enlace con el anchor Inicio a la página principal del blog, y sin llamar a la base de datos.
Usar el menor número de plugins posible

Hay muchas personas que sienten la necesidad de tener un plugin para todo cuando en realidad no es necesario. Entre menor sea el número de plugins, mucho mejor ya que se ahorran consultas y espacio en el disco del servidor. Si se necesita una función extra, siempre se puede recurrir al buen functions.php (archivo ubicado en la carpeta del theme) que precisamente para eso lo crearon. Por ejemplo, algunos casos en los que es recomendable el uso de plugins:
- Combatir el SPAM. Ya sea Akismet, Bad Behavior u otra solución.
- Optimización SEO: El ejemplo obvio es el uso del AIOSP.
- Colocar un formulario de contacto (si es que no se tiene conocimiento sobre formularios Web es una buena opción).
- Redirigir el tráfico del feed a un servicio como FeedBurner. Aunque se puede lograr con entradas en el .htaccess, no s una tarea tan fácil para el usuario promedio como yo.
- Generar Sitemaps.
- Cachear el contenido.
Plugins recomendados para WordPress
Los plugins que recomiendo sirven para aumentar el desempeño de un sitio construido sobre WordPress. Obviamente las opiniones pueden variar ya que hablo de acuerdo a mi experiencia con estos plugins:
- WP Super Cache: como lo indica el nombre, es un plugin para crear versiones estáticas de las páginas para que sean accedidas más rápidamente. Es un excelente complemento que si es bien configurado, definitivamente puede mejorar el desempeño notablemente.
- PHP Speedy WP: este plugin se encarga de eliminar los espacios en blanco de archivos JS y CSS para disminuir su tamaño. Por desgracia no es compatible con WP Super Cache por el momento.
- W3 Total Cache: sencillamente el mejor plugin que he visto para WordPress. Se trata de una completa suite de cacheo y optimización ya que tiene varios módulos integrados como la posibilidad de mover los archivos a una CDN, diferentes métodos de cacheo para páginas y archivos estáticos, mininización de archivos JS y CSS (reduce su tamaño y los combina en uno solo). En fin, es una joya y es tan bueno que blogs como Mashable lo usan. La desventaja es que no es tan fácil de configurar como los otros, aunque no es nada extremadamente difícil.
Por el momento eso es todo en esta guía, que cubre aspectos básicos sobre la optimización de WordPress. Si te interesa este tema, puedes leer también esta otra guía que escribí al respecto. Google tiene una cantidad tremenda de información al respecto, así que material hay de sobra. Suerte con tus modificaciones.
Esta guía surgió gracias a este post en StoreCrowd. He añadido algunos comentarios según mi experiencia. La sección de comentarios está abierta para sugerencias.
Etiquetas:Optimización de WordPress, WordPress









