Varnish para WordPress como Servicio

¿Tu WordPress va lento? ¿Te gustaría que volase? Pues esta es la idea que he estado planteando desde hace unos días… Hace cosa de un año que comencé a montar blogs con WordPress bajo Varnish. Al principio iba bien pero configurarlo y mantener las máquinas es algo complejo, a parte de que no todo el mundo puede permitirse montar y mantenerlo. Así que, tras muchas vueltas, pruebas, testeo de plugins y demás, he conseguido poder montar un sistema que, de forma sencilla, permita cachear y mantener un WordPress con Varnish.

El sistema es sencillo… sólo hay que subir 2 plugins: uno de ellos es para purgar (limpiar) la caché de Varnish cuando alguien publica algo, comenta, edita… así, cuando el blog cambie, se regenera la caché y los usuarios ven las cosas nuevas y actualizadas; el otro plugin es algo más genérico y hace referencia a la gestión de la IP, ya que al ser un web-proxy siempre devuelve la misma IP y eso genera problemas con el spam y similares.

Una vez configurado esto, lo bueno es que se puede probar antes de ponerlo en producción. Simplemente te cambias la IP de tu fichero de host y compruebas si todo funciona correctamente. Una vez probado, se cambian las DNS del dominio y ya está, todo listo.

Una cosa buena también que tiene este sistema es que, si por lo que sea, el Varnish empezase a hacer e tonto o quieres dejar de usar el servicio, vuelves a poner tus DNS como antes, quitas los plugins y ya está, todo vuelve a la normalidad.

¿Te gustaría probarlo? Pues si te interesa puedes escribirme (si me adelantas el dominio en que lo quieres probar, mejor que mejor) y te escribo con todos los pasos. Por ahora vamos a dar una semana de pruebas a aquellos que lo quieras testear en su sitio (ya sea por fichero de host o en producción) y a partir de ahí valdrá 120 euros/año u 80 euros/semestre.

¿Qué cosas buenas tiene usar este sistema? Primero que tu sitio estará cacheado y que soportará picos de tráfico sin problema; que cuando un robots de búsqueda te visite verá que la web va rápida y te indexará más rápido; por norma general el tráfico SEO aumenta a las 4 semanas de usar este sistema… además, sigues teniendo el control de todo en todo momento.

Y para muestra, un par de pruebas… Las he realizado desde el sitio Web Page test, primero apuntando a la IP del servidor directamente y luego apuntando a la del servidor con Varnish. El sitio desde el que se han hecho las pruebas es París con conexión de Cable.

Enlaces a los resultados de la Prueba Directa y a la Prueba con Varnish.

Como detalle, que no lo he podido capturar al 100%, el sistema hace 2 peticiones, la primera normal, luego refresca y usa la caché del navegador, y luego vuelve a repetir lo mismo. En el caso del acceso duirecto, WordPress ha de generar completamente la página, que tarda aproximadamente unos 2,5 segundos. Luego, en cualquier caso, el refresco es rápido, y tarda muy poco. Cuando estos e hace con Varnish delante, la primera ocasión tarda lo mismo, pero cuando vaciamos la caché del navegador como ya no se genera la página, tarda tan sólo 1,5 segundos.

DirectoVarnish
lectura 12.575s2.765s
caché 11.238s0.435s
lectura 22.172s1.416s
caché 21.245s0.315s

En general, como los usuarios navegarán por las versiones de “lectura 2″ (la lectura 1 sólo se ejecutará cuando haya contenido nuevo o se vacíe la caché), los datos muestran que el blog carga entre un 60% y un 75% más rápido. Os dejo con algunos otros gráficos:

En estos datos se ven los tiempos de respuesta que han obtenido mejor valoración en las 2 pruebas realizadas…

Acceso directo:

Acceso por Varnish:

Aquí se muestra en una valoración simple los resultados que dan Google Page Speed y Yahoo! YSlow…

Acceso directo:

Acceso por Varnish:

Y finalmente un checklist de todas las peticiones que se han relalizado…

Acceso directo:

Acceso por Varnish:

En fin, creo que es bastante obvio que usar Varnish es una gran ventaja competitiva con respecto a los sitios que no lo tienen…

Otra prueba interesante es hacer un test de estrés. La idea es hacer crecer las peticiones simultáneas al sitio… el test lleva un 50% de visitas desde Dublín (IE) y un 50% de visitas desde Palo Alto (CA, US), hasta las 100 conexiones simultáneas. Las gráficas son bastante clarificadoras…

Enlaces a los resultados de la Prueba Directa y a la Prueba con Varnish. Creo que las gráficas hablan por sí solas…

Tiempos de carga por página:

Clientes1531517085100
Directo1.63s2.71s3.98s17.26s21.18s26.54s
Varnish1.27s1.14s1.20s1.28s1.48s1.27s

Acceso directo:

Acceso por Varnish:

¿Te gustaría probarlo? Pues si te interesa puedes escribirme (si me adelantas el dominio en que lo quieres probar, mejor que mejor) y te escribo con todos los pasos. Por ahora vamos a dar una semana de pruebas a aquellos que lo quieras testear en su sitio (ya sea por fichero de host o en producción) y a partir de ahí valdrá 120 euros/año u 80 euros/semestre.

Search Congress Barcelona 2012

Estos días se está celebrando el Search Congress en Barcelona y una vez más me toca dar una charla. Este año es de Web Performance Optimization, y aunque es de sólo 30 minutos, creo que a los que no hayan escuchando nunca del tema les será mínimamente útil.

Hace ya un par años, en el Search Congress de Bilbao presenté algo que aún no llamaba WPO sino “infraestructura SEO” en el que di los primeros pasos a tratar sobre todo este mundillo. Esta vez no he tenido las 3 horas que tuve la otra vez, sólo 30 minutos, así que como dicen por aquí “us faig cinc cèntims”.

Os dejo la presentación para que la descarguéis si os interesa, muy en la línea de seguir siendo un SEO Open Source.

Ancho de banda, latencia y tenerla grande (la conectividad)

El tamaño importa, ¿pero cuánto? Pues las pruebas que se han hecho dicen que tener una conexión a 5 Mbps es suficiente para que un sitio web funcione de forma bastante razonable siempre desde el punto de vista del cliente, claro. Y es que Internet, como en muchas ocasiones dice Jaime Ferré es como un milagro que funcione, pero tiene limitaciones físicas, porque la velocidad de la luz es la que es.

En muchas ocasiones hablamos que una web ha de cargar rápido y que cargue rápido significa que ha de tardar entre 1,5 y 2,5 segundos. En este tiempo hemos de incluir el tiempo desde que el usuario pulsa “Intro” en su navegador hasta que la página se muestra por pantalla. Y en la mayor parte de veces nos paramos a revisar los pequeños detalles de la carga del propio sitio: que si unir y minimizar CSS y JavaScript, hacer la menor cantidad de peticiones, CSS Sprites… pero hay una limitación física sobre la que la mayor parte de gente no piensa: la distancia.

Imagina que tienes tu servidor web en Estados Unidos, en Boston, por ejemplo. Tú vives en Madrid. Cada vez que hagas una petición a tu sitio web has de ir de tu casa al centro de datos de Madrid, de este a París, Londres, Nueva York, Boston, y volver. En total más de 7.700 kilómetros de cable con varios routers de por medio. Teniendo en cuenta que la velocidad de la luz por cables de fibra óptica es de 200.000 km/h (a diferencia de los 300.000 km/h que tiene en el vacío), sólo por la distancia de cable ya tenemos un tiempo de espera de 38ms, que en ida y vuelta son el doble, 76ms. Y este tiempo es sin contar con los routers y la electrónica que pueda haber, sin tener en cuenta pérdidas y suponiendo que la conexión es directamente con fibra de punto a punto yendo un bit a la máxima velocidad. Esto significa que, prácticamente, 1 décima de segundo se pierde en la conectividad en sí.

Ahora pongamos un ejemplo más práctico. Tenemos una imagen en el servidor que pesa 25KB. Hacer la petición a esa imagen desde Madrid hasta Boston implicaría unos 45ms en la petición, otros 45ms en la respuesta y unos 5ms en traer la información. Esto sería con una conexión de 5 Mbps sin pérdidas. Esto significa que de los 95ms que tarda en hacerse todo el proceso, más del 90% de la información se reduce a tiempos de latencia de la red.

Y ahora que sabes esto… ¿aún te preguntas porqué tu sitio web carga lento? Recuerda que es importante que tus servidores estén cerca (físicamente) de tus usuarios, y si no puede ser así, utilizar sistemas como BGP para conseguirlo.

Navigation Time API en Google Analytics

Una de las API más interesantes que nos trae el W3C en los últimos tiempos y que han implementado algunos navegadores es la Navigation Time API. Si queréis ver una prueba de datos, podéis probar la página de Navigaton Timing de la Guía de WPO.

Pero claro, estos datos dependen de los usuarios y en la mayoría de ocasiones no los tenemos disponibles… así que, ¿por qué no añadirlos a Google Analytics? Sí, como he dicho no estarán en todas las páginas y tendremos información parcial ya que sólo está disponible en algunos navegadores, pero al menos tendremos cierta información.

La información que propongo guardar es la siguiente:

  • DNS: es el tiempo que se dedica a hacer peticiones DNS.
  • Connect: es el tiempo que se dedica a procesos propios de TCP; esto puede implicar colas en peticiones por problemas de paralelización.
  • Petición: es el tiempo que se tarda desde que se hace la petición (enviamos el primer byte) hasta que se devuelve el contenido (recibimos el último byte).
  • DOM: es el tiempo que tarda el navegador en maquetar la página con sus elementos.
  • Carga: es el tiempo que se tarda desde que se empiezan han recibido los contenidos hasta que la página se ha cargado completamente (incluye el tiempo DOM).

Una vez tenemos caros los distintos tiempos que vamos a tomar como medida, vamos a guardarlos como Eventos en Google Analytics.

function getPerformanceTiming() {
  var timing = window.performance.timing;
  dns = timing.domainLookupEnd - timing.domainLookupStart;
  connect = timing.connectEnd - timing.connectStart;
  peticion = timing.responseStart - timing.connectEnd;
  dom = timing.domComplete - timing.domLoading;
  carga = timing.loadEventEnd - timing.responseEnd;
  return {
    dns, connect, peticion, dom, carga
  };
}

Y ahora que ya tenemos estos datos guardados en variables, tan sólo hay que enviarlos a Google Analytics mediante las funciones de eventos:

window.onload = function() {
  if (window.performance && window.performance.timing) {
    var tiempos = getPerformanceTiming();
    _gaq.push(["_trackEvent", "Navigation Timing API", "DNS", undefined, tiempos.dns, true]);
    _gaq.push(["_trackEvent", "Navigation Timing API", "Connect", undefined, tiempos.connect, true]);
    _gaq.push(["_trackEvent", "Navigation Timing API", "Peticion", undefined, tiempos.peticion, true]);
    _gaq.push(["_trackEvent", "Navigation Timing API", "DOM", undefined, tiempos.dom, true]);
    _gaq.push(["_trackEvent", "Navigation Timing API", "Carga", undefined, tiempos.carga, true]);
  }
};

Aunque todavía supongo que se puede mejorar bastante, aquí os dejo un ejemplo de datos:

Pirámide de Maslow del internauta

El ser humano tiene unas necesidades, y eso es lo que el Señor Maslow puso en formato gráfico en una pirámide… pero Internet también tiene su público y esas necesidades no son tan personales sino que te las da el sitio web que estás visitando. Y es que la pirámide del internauta es muy sencilla.

En la parte más baja de la pirámide, en la base encontramos algo muy simple: el sitio web ha de funcionar. Y es que si un sitio web no funciona, apaga y vámonos. Ya digo que puede parecer una tontería, pero que un sitio web esté caído creo que es de las cosas más duras que te puede pasar. De ahí todo el tema del “cloud” y la virtualización, distribución de cargas, etc… es importante que un proyecto en Internet siempre esté en línea. En resumen: infraestructura.

El siguiente escalón es el de conseguir que el sitio cargue rápido. Si ya has conseguido que el usuario llegue a tu sitio web, es importante que tenga una sensación de velocidad para que se sienta a gusto y pueda navegar por el sitio con tranquilidad. Esto, ya personalmente, partiendo de unas conexiones a Internet mínimas. Para mi, por ahora, me baso en conexiones de 3 Mbps, algo mínimo en todos los países de Europa, Norte América y parte de Sud América. En resumen: Web Performance Optimization.

El siguiente escalón, ya por encima de la mitad, tenemos algo que hará que el proyecto sobreviva: que sea útil. En Internet hoy en día prácticamente tenemos de todo, pero lo que nunca sobra son herramientas y servicios de utilidad. La mayoría de los sitios web de Internet que duran más de un año es porque son útiles, ya sea como Google (buscador), Facebook (red social), Twitter (comunicación), Amazon (compras), eBay (mercadillo / subastas)… ejemplos hay muchos, proyectos que duren mucho no tantos.

Y para acabar, en lo alto de la pirámide, encontramos algo que puede ser un poco feo de decir, pero el sitio web ha de ser “cool”. Está bien que sea útil, que cargue rápido, que funcione, pero una vez tienes todo eso… ¿no debe ser cool? Debe tener ese punto que lo haga accesible a todos pero a la vez con su punto de exclusividad. Recuerdo cuando tener una cuenta en GMail era difícil y si lo tenías, “molabas”. Lo mismo pasa en Facebook, que como todo el mundo lo tiene, tú has de tenerlo, tiene aplicaciones, permite hacer muchas cosas…

  1. “cool”
  2. utilidad
  3. velocidad
  4. ¡está en línea!

Y ahora que has visto esa pirámide… ¿en qué escalón está tu sitio web y qué escalón quiere tu usuario?

Herramienta que decide el mejor sitio de los contenidos

Por norma general nos toca a los creadores de sitios web decidir dónde va la publicidad o los bloques de contenidos… esto, junto al departamento de marketing acaba constituyendo la creación de un sitio web. Pero, en muchas ocasiones tener la publicidad o determinados bloques de contenido “que generan beneficios” no es siempre el adecuado… ¿qué tal si dejamos a Yahoo! decidir cuál es el sitio óptimo para colocar un bloque de contenido relacionado (tal y como explica en System and method using sampling for allocating web page placements in online publishing of content?

Los medios de comunicación offline, principalmente los periódicos, tienen una estructura de contenidos que poco puede variar, ya que el espacio es limitado en espacio… pero en Internet el espacio no lo es tanto, ya que si es necesario la página se puede estirar o enlazar a otro lugar donde colocar galerías de imágenes u otros elementos.

Es cierto que existen sistemas de testing A/B que pueden ayudar a decidir qué elemento o versión de página es más recomendable para sacar mayor rendimiento, herramientas que permiten personalizar a los usuarios determinados tipos de contenidos dentro de las páginas pero… ¿y si esto se pudiera hacer de forma automática?

El objetivo es tener una herramienta que te permita decidir qué bloques se pueden “mover”, qué tipos de bloques se pueden añadir (por ejemplo poner un bloque de enlaces relacionados, de contenidos relacionados, de galerías, de últimos contenidos, publicidad, etc…) con el objetivo de maximizar los beneficios. De esta forma, el sistema de forma automática iría tomando muestras y probando los contenidos en distintos sitios midiendo lo que el usuario hace cuando navega o pulsa en enlaces. De esta forma se conseguiría que los contenidos que mejor conversión tienen se queden en la página y en las zonas donde mejor conversión hay.

If there may be a significant proportion of potential content items to be sampled that do not have click-through rates, then web page placements may be allocated for content items to be sampled using fair chance slotting. In this case, web page placements sorted in ascending order may be matched with the content items sorted in descending order. This may allow content items with a lower payoff to be allocated locations of web page placements with a higher click probability in order to provide a fair chance to learn click through rates of content items. Otherwise, web page placements may be allocated for content items to be sampled using iterative sampling. In this case, web page placements may be sorted in rank order by normalized click probability. Then a content item may be randomly selected from an optimal subset of content items for allocation to the highest ranked unallocated web page placement. After the content item may be allocated, the content item may be removed from the set of content items. Each remaining highest ranked unallocated web page placement may be similarly allocated a content item randomly selected from an optimal subset of content items until the unallocated web page placements are allocated.

Aunque esto puede parece bastante sencillo, sin duda es un sistema interesante de análisis que podría hacer que el diseño de los sitios cambiase radicalmente e incluso que se personalizase por un determinado perfil de usuario, consiguiendo maximizar los ingresos de los sitios al máximo.

Tiempo de carga de una web

En SEO y WPO hay muchas cifras a tratar. Como expliqué en el artículo que comparaba el WPO con la Fórmula 1 la cosa va de décimas, pero… ¿cuáles son las décimas que importan?

En los paneles de Google Webmaster Tools tenemos muchas cifras relacionados con tiempos, y estas cifras significan muchas cosas distintas. Voy a ver si soy capaz de explicar cada una de ellas.

Una de las primeras gráficas que tenemos es la de “Rendimiento del Sitio”:

Esta gráfica lo que muestra es el tiempo de carga de la página, desde que se descarga el primer byte hasta que se descarga el último, incluyendo la descarga del HTML y de todos los ficheros relacionados (CSS, JavaScript, imágenes, publicidad, etc…). Como digo es el tiempo desde que se recibe el primer byte, y no el tiempo que tarda en conectarse. Esta gráfica va íntimamente relacionada con el Google Page Speed, de forma que supuestamente un buen Page Speed te debería dar un buen tiempo de respuesta. Lo que sí tiene que ver esta gráfica es la conectividad que tienes. Si está limitada en ancho de banda o a Google le cuesta llegar a tu sitio web, el tiempo será malo. Se supone que estas cifras deberían estar rondando los 2,5 segundos, aunque si tu página tiene bastantes contenidos multimedia puede rondar hasta los 5 segundos.

Un siguiente dato que debemos revisar se encuentra en la pestaña “Explorar como Googlebot”:

Tipo de robot de Google: Web
Tiempo de descarga (en milisegundos): 780

Este es el tiempo que Google tarda en descargar únicamente el fichero HTML. En este caso se cuenta el tiempo que tarda el software en generar la página, por lo que se nota enormemente si la página está cacheada de no estarla. El tiempo medio que debería aparecer es de unos 150 a 300 milisegundos (dependiendo del tamaño de la página, aunque una de 100 KB no debería pasar de los 300 si está bien cacheada).

Para acabar tenemos la gráfica de “Tiempo de descarga de una página”:

En este caso, por experiencia propia, sí que influye el tiempo de respuesta de la conectividad, de forma que estar “bien conectado con Google” influye mucho. En este caso el tiempo medio debería estar entre 250 y 400 milisegundos.

Hay que tener en cuenta que las mediciones de estas cifras son bastante distintas según “desde dónde Google” lea los datos. Claro está que no es lo mismo venir de un Centro de Datos que esté en el mismo país en el mismo en el que se encuentra el propio sitio alojado que tener que conectarse desde Mountain View que estar en un país cercano. La simple conectividad hará variar estas cifras.

Tampoco hay que confundir estas cifras con las que puede dar Google Page Speed o Yahoo! YSlow. Hay que diferenciar una cosa que es la conectividad y los tiempos de generación de ficheros, y otra cosa es el tiempo que tarda el navegador en paralelizar las descargas añadidas a un HTML (imágenes y similares) y luego “pintarlo” por pantalla.

WPO, SEO y Fórmula 1

Llevo viendo Fórmula 1 desde hace muchos años, antes de que Alonso estuviera en Minardi, y desde hace un tiempo que me doy cuenta de que la Fórmula 1 cada día se parece más al SEO y al WPO. La cosa va de milésimas de segundo, de fiabilidad y de copiar lo bueno de los demás coches (o webs).

Lo entretenido de la Fórmula 1 en muchos casos es, para los que no entiendan mucho, que existen una serie de equipos con distintos presupuestos, que cada equipo suele tener 3 pilotos (2 que corren y 1 que prueba), una serie de fabricantes de motores, en esta temporada un único fabricante de ruedas, distintos fabricantes de combustibles y, principalmente, cada equipo juega con la aerodinámica. Podríamos decir que lo que diferencia, principalmente, a los equipos es este último punto.

Es curioso que distintos equipos ofrezcan motores a otros equipos. Por ejemplo, Red Bull calza motores Renault, usa las mismas ruedas Pirelli que el resto, pero en cambio Red Bull es un equipo puntero y Renault ahora se podría considerar un equipo medio-alto. De la misma forma pasa con Ferrari, que a parte de tener su propio equipo es el proveedor de motores de Toro Rosso, equipo considerado medio-bajo dentro de la competición. Y es que muchas veces, en el SEO, el software no lo es todo, el motor puede ser el mismo, como puede ser un WordPress, un Magento o lo que queramos poner delante. Incluso las ruedas son las mismas, pero cada escudería es capaz de hacer que unos mismos pneumáticos aguanten más o menos las carreras según el coche y la agresividad del piloto.

Lo que sí que cambia entre unos equipos y otros es la aerodinámica y los inventos que cada ciertas carreras alguno de los equipos presenta. Difusores dobles, difusores bufados, alerones móviles, escapes laterales, escapes traseros… Sin duda cada carrera que vemos también va acompañada de la estampa en el que algún representante de otro equipo pasa a dar una ojeada por el box de la competencia.

De la misma forma que en SEO y en WPO existen unas series de normas que la FIA pone sobre la mesa cada temporada, pero aunque la FIA es la que pone una serie de normas, el que tiene el control del circo es Bernie Ecclestone. Se podría decir que Bernie es como Google: él manda, decide quién tiene los derechos, ingresa, cobra y luego reparte. Aún así, durante la carrera el que manda es el director de la misma, Charlie Whiting, también conocido como Matt Cutts en ciertos ámbitos. Él decide cuando comienza la carrera, si alguien se pasa de la ralla o cuando hay que sacar el coche de seguridad para que los corredores vayan por una pista segura. Y es que controlar una carrera es complicado. El equipo durante la carrera tiene acceso a todos los team radios para saber qué van diciendo los responsables de los equipos a sus coches, si hay tácticas de equipo entre ambos coches de una misma escudería y para animar o informar del estado de la carrera.

Pero si algo deciden son las penalizaciones. Si pisas la ralla por donde no debes, si te pasas de velocidad al entrar en el pit lane o chocas contra otro coche puedes sufrir una penalización de 5 segundos o tener que hacer un drive through perdiendo casi todas las posibilidades de ganar la carrera. De todas formas no hay que confundir estas penalizaciones con las degradaciones que puede sufrir el coche por hacer alguna cosa mal, o por tener ciertos defectos incluso cargarte los pneumáticos. Sin duda que el coche no funcione bien te hará perder fuelle frente a tus competidores.

Durante una carrera pueden pasar muchas cosas. Por ejemplo que llueva (café-inne) y, de golpe, todas las estrategias o ideas que tenías para ganar han de cambiar. De repente has de entrar en el pit lane y depender de que tu equipo, en la vuelta correcta ponga los pneumáticos correspondientes en el menor tiempo posible, porque como alguien meta la pata te puedes quedar sin una tuerca bien collada y acabar con una rueda volando antes de volver a pista. Si un equipo es bueno y está bien sincronizado conseguirá en menos de 4 segundos un cambio de ruedas impecable, e incluso adelantar a tu competidor que ha tardado en hacer los cambios. Pero además del propio cambio en sí, hay que saber decidir en qué momento entrar, porque si te pasas una vuelta puedes gastar mucho los pneumáticos de mojado y perder algunas décimas o todo lo contrario, si comienza a llover y vas con los secos que se te salga el coche de pista y estrellarte.

Pero sin duda a mi lo que más me apasiona es todo lo que hay antes de las carreras de los domingos. Los entrenamientos libres, las calificaciones, y la semana o semanas de trabajo anteriores a un Gran Premio. Lo que se cuece en Milton Keynes (la sede de Red Bull) debe ser bastante increíble. Personalmente me considero un Adrian Newey y sin duda mi socio Jaume sería más Christian Horner. Pero aunque haya dos mentes pensantes al frente de un equipo, siempre está el que paga y los ingenieros y mecánicos que ponen a punto el coche de Fórmula 1. Eso sí, como alguien meta la pata el coche puede perder algunas décimas por el camino.

Y es que al final el rendimiento de un coche es lo que diferencia a unos y otros… puedes ganar unas décimas de segundo si pones un buen combustible, mantienes los pneumáticos a la temperatura perfecta y sobre todo has de hacer que los pilotos rueden y rueden, tanto en el simulador como en la pista.

Lo bueno de la Fórmula 1 es que cada temporada nos encontramos con nuevos reglamentos (las reglas que los buscadores ponen), nuevos retos (sobre todo ser el primero por delante de los demás) y conseguir puntos, puntos que al final de temporada se convertirán en cientos de miles de euros. Cada uno de los equipos trazará su propia estrategia y podrá hacer pruebas con sus distintos pilotos. Eso sí, si lo que quieres es ser el mejor, la mejor formación lo que necesitas es un buen piloto y un buen equipo que haga, simplemente, lo que hay que hacer, buscando aquellos elementos que el reglamento se ha podido dejar en el aire, intentando sacarle todo el partido a los motores y pneumáticos pero sobre todo diseñando el mejor coche con la mejor aerodinámica y poniéndolo en las mejores manos posibles.

Google +1, ¿más rápido?

Hace unos días que Google ha anunciado una mejora de velocidad en el botón de Google Plus One. ¿Pero realmente estos códigos aumentan la velocidad?

Cuando hice el plugin para WordPress del Social Share Button hice algunos cambios en el código que te daban anteriormente por defecto. Y es que con la llegada de HTML5 se ha introducido un elemento en los scripts, el async que funciona en todos los navegadores desde hace algunas versiones.

Es curioso que Google esté apostando por dejar de dar soporte a varios navegadores (principalmente Explorer 7 para abajo, de Firefox 3.5 para abajo y versiones ya algo antiguas de Chrome y Opera). Sin duda Opera es el mejor navegador en cuanto a soporte de HTML5, por detrás pondría Chrome y Firefox y finalmente Explorer…

Ahora mi pregunta es… ¿realmente es necesario poner un código tal que así?

<script type="text/javascript">
  (function() {
    var po = document.createElement('script');
    po.type = 'text/javascript';
    po.async = true;
    po.src = 'https://apis.google.com/js/plusone.js';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(po, s);
  })();
</script>

¿O es mejor ya directamente dar soporte a algo tal que así?

<script async type="text/javascript" src="http://apis.google.com/js/plusone.js"></script>

En ambos casos el sistema funciona “igual” de rápido, y pongo el igual entre comillas porque en una versión actualizada de los navegadores el segundo código funciona más rápido ya que no ha de ejecutar la función, algo que consume recursos.

El dilema está servido… por un lado hay que ir dejando de dar soporte a los navegadores antiguos (algo que llevo haciendo desde hace muchos años) y por otro los que deberían presionar para que esto ocurra siguen haciendo cosas extrañas según les parece.

Esto me lleva a pensar en el código de Google Analytics que también, decenas de veces he intentado optimizar… La situación es similar: ¿dejamos el código que nos ofrecen ellos, o ponemos el que realmente deberíamos poner?

<script type="text/javascript">
  (function() {
    var ga = document.createElement('script');
    ga.type = 'text/javascript';
    ga.async = true;
    ga.src = 'http://www.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(ga, s);
  })();
</script>

Lo podemos enfrentar tranquilamente a algo más simple como:

<script async type="text/javascript" src="http://www.google-analytics.com/ga.js"></script>

Personalmente creo que voy a empezar a aplicar ya la segunda opción en la mayoría de los proyectos, al menos en los que estoy seguro de que el segundo código va a funcionar (que van a ser todos los proyectos, con excepción de alguno concreto)… Y es que desde hace ya bastante tiempo sigo la norma básica que me va a hacer ganar dinero: quien tiene un Explorer 6 no ve Youtube y todavía menos va a pagar dinero en mi sitio para comprar algún producto.

Estáticos para WordPress

La verdad es que WordPress es un gran CMS y, sobre todo, muy extensible y configurable. En esta ocasión me gustaría enlazar una entrada que publiqué hace ya un tiempo en el que hablaba de los dominios sin cookies con la posibilidad de configurar WordPress para tener las imágenes separadas del dominio principal.

El objetivo de este sistema básicamente es separar lo que es la propia web de los contenidos estáticos que se pueden separar. En principio se podrían separar hasta los diseños (JS, CSS…) pero suele ser algo más complejo. Para empezar la idea es separar los contenidos que subimos a través del panel y que suelen estar en la carpeta /wp-content/uploads/.

Para comenzar lo que debemos tener es un dominio configurado para estáticos. En mi caso he usado el dominio javiercasares.com para el sitio web y el dominio javiercasares.net para los estáticos. Este dominio principalmente debe tener 2 cosas: ETag y Cookieless.

Lo primero que hemos de hacer es apuntar los contenidos al nuevo dominio. Para ello iremos a la opción Ajustes -> Multimedia y en la parte inferior tenemos las direcciones donde se almacenan los archivos. Los campos son los siguientes:

  • Guardar los archivos subidos en esta carpeta: Aquí deberemos poner la dirección completa donde se subirán los ficheros. Por ejemplo /home/estatico/uploads
  • Ruta URL completa a los archivos: Es la URL pública. Por ejemplo: http://javiercasares.net/uploads

Con esto conseguimos que a partir de este momento todos los ficheros que subamos se almacenen en esa ruta del servidor y que la URL pública sea esa.

Pero claro… ¿qué ocurre si ya teníamos un sitio web funcionando? Pues que una vez tengamos el dominio para estáticos configurado debemos hacer algunos pasos previos. El primero de ellos es copiar todos los ficheros de la antigua carpeta wp-content/uploads a la nueva carpeta. Al final del proceso, si queremos, podremos borrar los archivos originales, ya que no se volverán a utilizar.

El siguiente paso es el de actualizar todos los contenidos existentes en la base de datos. Hay que actualizar todos aquellos sitios en los que aún se llama a las direcciones URL / contenidos antiguos para que apunten a los nuevos. Para ello deberemos ejecutar las siguientes consultas en la base de datos:

UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://javiercasares.com/wp-content/', 'http://javiercasares.net/');
UPDATE wp_posts SET guid = REPLACE (guid, 'http://javiercasares.com/wp-content/', 'http://javiercasares.net/');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://javiercasares.com/wp-content/', 'http://javiercasares.net/');
UPDATE wp_commentmeta SET meta_value = REPLACE (meta_value, 'http://javiercasares.com/wp-content/', 'http://javiercasares.net/');
UPDATE wp_comments SET comment_content = REPLACE (comment_content, 'http://javiercasares.com/wp-content/', 'http://javiercasares.net/');
UPDATE wp_options SET option_value = REPLACE (option_value, 'http://javiercasares.com/wp-content/', 'http://javiercasares.net/');

La primera línea sustituye las direcciones en los contenidos (entradas y páginas), el segundo actualiza las direcciones de los adjuntos, el tercero si tenemos alguna imagen en los metadatos de las entradas, la cuarta y quinta es para los comentarios y la sexta hace referencia a las opciones del propio WordPress (por ejemplo para cabeceras o ficheros estándar que tengamos).

Con esto conseguiremos aumentar la velocidad de carga del sitio web hecho con WordPress además de permitir que el cacheo de las imágenes se haga de forma correcta si utilizas algún tipo de proxy-caché en algún sitio, ya que evitas tener Cookies y le añades los ETag que harán que se guarde la información completamente.

Si alguien necesita una optimización del rendimiento de su sitio web, desde Keep It Simple Lab ofrecermos un servicio de consultoría de WPO con el que podrá mejorar la velocidad de carga de su sitio (ya sea WordPress u otro sistema), aumentar la velocidad y reducir los recursos que se consumen.