Optimizar Pagina Web
Veremos en esta sección algunas cosillas importantes a la hora de que «Google nos vea con buenos Ojos». El ranking que establece google es un misterio y entre conjeturas e informes que vienen por las propios ingenieros de Google desde su plataforma de Herramientas para webmasters de Google podemos sacar una serie de consejos que harán una página mas visitada. Uno de los criterios de los que se parte en este estudio es la sensatez, o sea.
- Las páginas con imágenes livianas prevalecen sobre las páginas con imágenes pesadas. Esto es sensato y así se considera un de los criterios para posicionar una web antes que otra. Trabajaremos por tanto el tema de Optimizar Imágenes
1º Optimizar Imágenes
optimizar IMÁGENES con RIOT ?
2º Cache para las imágenes
Cuando visitamos una web, es fácil que volvamos a verla pasados unos días o bien repetir alguna de las imágenes ya vistas en otra página del mismo dominio. ¿ Para qué repetirla y volverla a cargar al navegador ?. ¿ Para qué hacer una nueva petición al servidor de una imagen que ya hemos visto ?. Si un dominio es muy visitado se puede colapsar por el exceso de peticiones y para evitar esto, tenemos que recurrir al Cache de Imágenes
<ifmodule mod_expires.c> ExpiresActive On ExpiresDefault A3600 <FilesMatch ".(xml|txt|html)$"> # 2 horas de vigencia para los archivos xml, txt y html ExpiresDefault A7200 Header append Cache-Control "public" </FilesMatch>
<FilesMatch ".(gif|jpg|jpeg|png|swf)$"> # 2 Semanas para las imágenes con esas terminaciones ExpiresDefault A604800 Header append Cache-Control "public" </FilesMatch>
<FilesMatch ".(js|css)$"> # 3 días para archivos java y hojas de estilo ExpiresDefault A259200 Header append Cache-Control "public" </FilesMatch> </ifmodule>
3º Peticiones al servidor
Al página una página en un navegador, empleamos un tiempo valioso en hacer una serie de peticiones al servidor que lo contiene (http request ) que hacen aumentar el tiempo de carga de la página. A mas archivos php, java, jpg, css , etc que se hagan, mas tiempo en cargarse. Reducir el número de requerimientos al servidor hará reducir el tiempo de carga y así tener una web más rápida. Veremos algunas técnicas para reducir el http request.
- CSS Sprites. Se utiliza para reducir el número de imágenes descargadas del servidor. De hace una imagen que contenga todas las que se descargan ( por ejemplo, pasamos de 10 a 1 ) y empleando las propiedades background-position y Css
background-image
se toma el «pedacito» de imagen que corresponde a la imagen que queremos mostrar. Aunque no se reduce el tamaño total de las imágenes a descargar, pasamos en este ejemplo de 10 peticiones a sólo 1. - Inline images. Con este método se usa el sistema de datos de URL scheme para incrustar los datos de las imágenes en el mismo documento html. El resultado es un documento mucho mayor pero ganando en peticiones al servidor y , al usar el sistema de to embed the image data in the actual page. Si aplicamos este sistema a los archivos CSS que usen cache, se recude considerablemente el tiempo de descarga.
- Combinar archivos CSS en sólo uno , agrupar los javascript en uno y lo mismo con resto de archivos de la misma categoría reduce el número de http request. El Top ten de las web americanas tienen una media de 7 scripts y dos 2 CSS por página.
- El CDN se encarga de almacenar los contenidos estáticos ( regulados por los criterios de Cache ) de nuestra web como imagenes, css, javascript, etc.
- Cuando un cliente hace una petición de nuestra web, todo estos contenidos se cargan desde el CDN más próximo al usuario y los contenidos mas sensibles ( datos que se actualizan con mas frecuencia, como las páginas html, se cargan desde el servidor original.
- El resultado es una experiencia para el usuario mucho más rápida que tener que cargar todos los contendidos desde nuestro servidor que puede estar a miles de Kilómetros.
- El uso de esta Red ( que es de pago ) depende del objetivo de nuestra web. Para una empresa de ladrillos, no tiene sentido porque no vamos a exportar ladrillos a Japón, pero si es de trenes ( catalogo de Talgo ) puede ser muy beneficiosa porque si lo ven desde USA, y la web carga lentamente, no creen ustedes que damos mala imagen en vender trenes de alta velocidad cuando la web va muy lenta.
5º Comprimiendo Componentes con GZIP
Cuando hacemos una petición de una web al servidor, tenemos una acción de petición-respuesta como la representada en la siguiente gráfica.
En primer lugar, desde el ordenador se hace la solicitud al servidor. Éste la registra, la localiza y manda respuesta al navegador que existe ( código 200 ) y envía la página de unos 100 Kb. En resumidas cuentas, se manda lo que hay si existe y sin comprimir.
La evolución de los navegadores ha sido tal que , hoy por hoy, todos pueden recibir páginas comprimidas para ser mostradas en el mismo y , por supuesto, no es igual mandar por la red un archivo comprimido porque consume menos recursos y ancho de banda.
El procedimiento es el siguiente:
En la ilustración tenemos que la petición que hace ahora el navegador tiene un accept-encoding:gzip, o sea que solicita el archivo comprimido «si puede ser». El host lo recibe y como está configurado para servirlo, lo envía con un ahorro considerable de datos ( de 100 a sólo 10 ).
En resumidas cuentas, tenemos que:
- El navegador envía una cabecera diciendo al servidor que acepta contenidos comprimidos ( o bien método gzip o deflate ) de la forma
Accept-Encoding: gzip, deflate.
- El servidos envía la respuesta si el contenido está actualmente comprimido compressed:
Content-Encoding: gzip
Para configurar el servidor, añadimos estas líneas en el archivo .htaccess
# comprimimos los archivos html, javascript, txt, css, xml: # Vamos a comprimir los mas importantes. # se pueden añadir otros mas
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/javascript # o bein se pueden comprimir por su extensión #por ejemplo para los html <files *.html> SetOutputFilter DEFLATE </files>
Comprobamos si tenemos la web bien configurada
Para ello tenemos algunas herramientas útiles como son
- gidnetwork.com/tools/gzip-test.php
- Si se usa firefox, existe una extensión llamada Web Developer Toolbar. Una vez instalada, ir a > Information > View Document Size y mostrará que archivos vienen comprimidos y cuales no.
6º Archivos CSS en la cabecera
Se comprueba que poner la solicitud ( link ) del archivo css en la cabecera provoca una carga más rápida de la página, por ello es aconsejable situar en la cabecera el enlace al archivo CSS.
Situarlo en la parte inferior puede provocar espacios vacios, errores en la muestra de la web
7º ARCHIVOS javascript En el pie de página
Si el punto 6 trataba de poner los css arriba, en este caso, para provocar que la formación de la página sea progresiva y adecuada, con la menor demora, es aconsejable situar los archivos js lo mas tarde posible, ya que al ser archivos que se ejecutan una vez cargada la web, «están molestando» a la hora de la carga inicial. Puede hacer casos en los que no sea posible demorarlos en la carga, pero por regla general, mientras mas abajo mejor.
Otras reglas a tener en cuenta son:
- Evitar ciertas expresiones CSS que provoque errores en navegadores o estén en desuso
- Situar los archivos JavaScript y CSS fuera del contenido principal ( archivos externos ) e intentar agruparlos
- Optimizar las DNS
- Evitar re-direcciones