Doymer Consultores

  • Increase font size
  • Default font size
  • Decrease font size
Inicio Blog Joomla! Sirviendo contenido estático
02
Nov
2010

Sirviendo contenido estático

Imprimir PDF

Todo aquel al que le interese su sitio web se preocupa –o debiera preocuparse– de poner en práctica todos los mecanismos posibles para mejorar el posicionamiento de su página en los motores de búsqueda.

Esta labor es cada día más compleja y lo es más si servimos nuestras páginas desde un CMS y, en esto, Joomla! no es diferente. Diversos parámetros como el número de peticiones HTTP, el enviar la página comprimida, comprimir las imágenes, minimizar el código HTML, el de estilo y javascript, combinar los ficheros js y css, etc. están siendo tenidos en cuenta cada día de forma más intensa para determinar el posicionamiento de nuestro sitio.

Uno de estos factores, el suministro de contenido estático está ganando peso ya que se considera que existe una implicación por parte del desarrollador del sitio que se valora positivamente. Si quieres ver cómo valoran tu sitio los motores de búsqueda prueba en http://www.webpagetest.orgextlink. Introduce la URL de tu sitio y mira la puntuación que obtienes. ¿Has aprobado?. ¿Qué nota te ha puesto en el apartado 'Cache Static Content´? Probablemente te haya suspendido. No te preocupes, casi todo el mundo suspende.

Qué es eso de 'contenido estático'

Casi con toda probabilidad tu sitio utiliza cookies para controlar el estado de la página y si la sirves con un CMS como Joomla entonces seguro que los tienes. Esos cookies ocupan espacio en la conversación que mantienen el servidor y el navegador y son útiles para que el entorno sepa por dónde va la navegación. Pero sólo son útiles en aquellos casos en los que el dato que estás pidiendo posea la capacidad de procesarlos. Y esto no ocurre cuando se pide una imagen, un fichero css o un fichero javascript por ejemplo. Enviar cookies en este tipo de peticiones es un gasto inútil de ancho de banda y esta empezando a ser considerado de mal gusto por los buscadores.

El requisito que se está pidiendo (lo hace google, yahoo y muchos otros de los grandes) es definir un dominio adicional en el que los cookies estén desahabilitados y servir este tipo de contenidos desde aquí. Al no generar cookies el contenido de este sitio no puede ser dinámico y por ello la referencia a 'contenido estático'. Así si nuestro sitio es www.doymer.com, podemos crear uno nuevo llamado static.doymer.com para servir estos contenidos. Ahora podemos editar todos los artículos en donde aparezcan imágenes en la página y apuntarlas hacia este nuevo sitio y estaremos cumpliendo los deseos de los optimizadores sirviendo contenido estático.

Pero esta solución tiene dos puntos negros:

  1. Tenemos que actualizar todos los contenidos del sitio (de todos los sitios que gestionemos).
  2. ¿Qué pasa con todos aquellos contenidos adicionales de módulos que tenemos instalados?. Por ejemplo podemos tener varios banner, joomfish para tener varios idiomas, etc. ¿Cómo hacemos con sus ficheros de estilo, javascripts e imágenes si no están bajo nuestro control?. Y en el caso de un CMS como Joomla! además los contenidos de la plantilla.

El primer punto es realizable; sin embargo el segundo no. No tiene mucho sentido dedicarnos a modificar todas las extensiones instaladas y tampoco es realista pretender que sus desarrolladores lo hagan. Entonces ¿hay alguna forma de servir este tipo de contenidos de forma estática?

Engañando al sistema

Afortunadamente la respuesta es que si, al menos hasta cierto punto. Si quieres, antes de continuar, mira las conrtraindicaciones más abajo pero, en el caso de querer seguir adelante, para ello sólo tenemos que crear un dominio nuevo desde el que servir, de forma estática, nuestros contenidos. Esto sólo será posible si nuestro sitio activo está definido de forma que el dominio desde el que servimos las cookies no es el dominio raíz (es decir, servimos cookies asociadas a www.doymer.com y no a la raíz doymer.com. Mira primero en tu navegador el dominio de las cookies asociadas a tu sitio). Si este es el caso, aunque definamos el nuevo sitio como subdominio, el navegador seguira enviando cookies y no habremos resuelto nada. Otra cosa que podemos hacer en este caso es adquirir otro dominio de segundo nivel como dmrstatic.com o lo que sea que esté disponible y nos guste aunque esto tiene un coste adicional anual.

Si eres el responsable del dominio no olvides configurar los servidores DNS para que resuelvan correctamente el nuevo nombre de dominio creado o las peticiones realizadas a éste se perderán. Antes de proceder con el cambio verifica que la nueva dirección responde correctamente y no sigas hasta haber solucionado todos los problemas que encuentres.

Si no tenemos ese problema y estamos asociando nuestros cookies al lugar adecuado entonces podemos empezar por crear en el servidor nuestro nuevo dominio estático, por ejemplo static.doymer.com, de tal forma que comparta el origen de datos con el actual, es decir, que ambos tengan el mismo directorio particular si estamos hablando de un servidor IIS o que apunten a la misma carpeta si estamos hablando de un Apache.

sites_example

site_www

site_static caching_time

Las imágenes anteriores muestran ambos dominios tal y como existen en nuestro sistema en donde se puede apreciar que la ruta local es la misma para ambos. La ventaja es que podemos seguir utilizando las herramientas de edición y selección de imágenes de Joomla! como hasta ahora sin ninguna preocupación por el resultado. Puedes observar que hemos indicado que TODO el contenido servido desde static va a tener una vida de un par de días.

En algunos sistemas hospedados el panel de control no permite definir dos sitios que apunten al mismo directorio. En ese caso habrá que hablar con los administradores del sitio para que lo hagan ellos o lo permitan.

Este truco nos permite evitar tener que mantener dos sitios diferentes sincronizados y las páginas servidas por el dominio estático no contendrán cookies por lo que cumpliremos el requisito. Además de esta manera incluiremos, de forma indirecta, los elementos estáticos de todos los módulos y componentes instalados sin tener que realizar ninguna adaptación en ellos ya que en realidad apuntan al mismo sitio.

Para que este esquema funcione en la práctica aún nos quedan un par de cosas que hacer. La primera es utilizar una regla de redirección para reenviar las peticiones deseadas al sitio estático y la otra es crear una regla de redirección para evitar lo contrario, es decir, que peticiones que no sean de elementos estáticos vayan al sitio estático para garantizar que desde este dominio no servimos ficheros de tipo php ni de ningún otro tipo que pueda inyectar cookies y romper el esquema. Ambas cosas se hacen a través del fichero .htaccess o de algún redirector si nuestro servidor es windows.

RewriteCond %{HTTP_HOST} !^static\.doymer\.com$ 
RewriteCond %{REQUEST_URI} ^(.*)\.(png|jpg|gif|css|js)$
RedirectRule ^/(.*)$ http://static.doymer.com/$1 [R=301]

RewriteCond %{HTTP_HOST} ^static\.doymer\.com$
RewriteCond %{REQUEST_URI} !^(.*)\.(png|jpg|gif|css|js)$
RedirectRule ^(.*)$ http://www.doymer.com/ [R=301]

La primera regla redirecciona al sitio estático aquellas peticiones realizadas al sitio principal de elementos de tipo estático como imágenes, ficheros css y ficheros js. La segunda impide la descarga desde el sitio estático de contenido no estático y, en esencia, es la misma que la primera con la lógica invertida. En este caso reenviamos las peticiones al sitio principal.

Y si no tienes ningún redirector en tu sistema y usas IIS en el este artículo hicimos mención de las alternativas de redirectores existentes bajo windows y se puede usar alguno de ellos para realizar el trabajo. Si estás usando Apache busca la documentación sobre mod_rewrite y pon en servicio el fichero .htaccess. La seguridad de tu sistema te lo agradecerá.

Contraindicaciones

Igual que pasa con los preparados farmacológicos engañar al sistema tiene sus efectos secundarios y, depende de lo que necesitemos obtener, puede que sea peor el remedio que la enfermedad.  El mecanismo propuesto tiene el inconveniente de que cada solicitud realizada al sitio primario tiene que ser realizada, de nuevo, al sitio secundario por lo que duplicamos todas las peticiones de elementos estáticos existentes. Esto quiere decir que, a nivel de tráfico, no sólo no reducimos el consumo de ancho de banda sino que lo incrementamos. Los optimizadores van a poner en verde en su lista de requisitos el de contenidos estáticos pero se van a quejar que excesivas redirecciones. La de las imágenes estáticas las vamos a poder eliminar actualizando nuestros contenidos y este esquema nos va a permitir evitar trabajo extra de sincronización y dispersión de ficheros pero no vamos a poder hacer nada con las del resto de elementos.

Además cargamos a nuestro servidor web con un trabajo extra por la misma razon al tener que responder con una redirección a la primera petición y atender la segunda. Cierto es que la primera de ellas el servidor web ni siquiera la ve ya que el redirector se encarga de hacer el trabajo pero si que afecta a la carga de procesos de la máquina donde tenemos alojado el sitio.

Conclusión

Aunque con su lado oscuro esta es una primera aproximación al problema de servir contenido estático cuando generamos nuestras páginas desde un CMS. Y tal y como está la tecnología en este momento no hay demasiadas alternativas. Ninguna otra de las probadas como proxys inversos por ejemplo elimina el problema. Así que incluso con sus inconvenientes al menos obtiene lo que promete. Que cada uno decida si le conviene o no.

Share
Última actualización el Miércoles 03 de Noviembre de 2010 10:53  

Escribir un comentario

El propietario de esta página no se hace responsable de las opiniones de sus lectores en los comentarios, así como puede o no estar de acuerdo con lo que en ellos se diga.

Usa el juego limpio en tus comentarios

Por favor, no realices comentarios ofensivos o insultantes. Tampoco generes comentarios con publicidad o Spam. No utilices los comentarios para 'enchufar' tu sitio. Los enlaces que pongas podrán ser eliminados. Pretendemos crear un espacio de comunicación entre el autor y los lectores.

Todos agradeceremos el correcto uso de la ortografía, pues no todos somos capaces de entender mensajes 'codificados' tipo SMS. Además te rogamos uses signos de puntuación, si puede ser, para mejorar la comprensión de tu mensaje.
No escribas sólo en mayúsculas ya que en Internet escribir con mayúsculas equivale a GRITAR y no por gritar se te va a hacer más caso sino, probablemente, al contrario.

Reserva de Edición

Nos reservamos el derecho de no incluir comentarios que sean ofensivos, desagradables, que ataquen a terceros (racistas, homófobos, etc) o que no tengan que ver con el sitio o con el tema de que se trata.
Los datos suministrados al emitir tu comentario son privados y de tu propiedad y no serán usados para ningúna acción comercial ni de otro tipo.


Código de seguridad
Refescar


Archivo

Powered by ArtTree