Diferencia entre revisiones de «Usuario:Juanda/html/loadtime»

De WikiEducator
Saltar a: navegación, buscar
 
(8 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 +
{{TEP}}
 
{{Usuario:juanda/html/nav }}
 
{{Usuario:juanda/html/nav }}
  
{{#widget:Slides}} {{MiTitulo| Curso de html}}  
+
{{#widget:Slides}} {{MiTitulo| Curso de UX}}  
 
<div class="slides layout-regular template-default">
 
<div class="slides layout-regular template-default">
 
<div class="slide">
 
<div class="slide">
Línea 9: Línea 10:
 
==Buenas prácticas para acelerar la carga de una web==
 
==Buenas prácticas para acelerar la carga de una web==
 
</div>
 
</div>
 +
 +
 +
<div class="slide">
 +
===Latencia===
 +
*Elige un servidor adecuado comprobando la respuesta a comandos como ping o httping.
 +
*[http://www.igvita.com/2012/07/19/latency-the-new-web-performance-bottleneck/ El tiempo de latencia influye y mucho en el load time de la página]
 +
*Busca un hosting en Europa, no necesariamente España, pero evita "saltar el charco".
 +
*Usa ingeniería inversa. Averigua el [http://www.maxmind.com/en/geolocation_landing proveedor de hosting de la competencia].
 +
*El buscador bing mediante el comando ip: xx.xx.xx.xx da información sobre virtual hosting. También puedes usar webs del tipo domaintools.com (de pago).
 +
</div>
 +
 
<div class="slide">
 
<div class="slide">
 
*El tiempo de carga y la performance de una página web es muy importante para la experiencia de usuario (UX).  
 
*El tiempo de carga y la performance de una página web es muy importante para la experiencia de usuario (UX).  
Línea 26: Línea 38:
 
* Uso de sprites (y también image maps para imágenes contiguas). Ver ejercicios.
 
* Uso de sprites (y también image maps para imágenes contiguas). Ver ejercicios.
 
*Elección del tamaño adecuado de las imágenes: el html no debe escalar la imagen.
 
*Elección del tamaño adecuado de las imágenes: el html no debe escalar la imagen.
 +
*PageSpeed Insights (by Google) directamente da las imágenes optimizadas y también información sobre el tamaño para escalarla (ojo, habrá que correr PageSpeed con UserAgents diferentes si la web es responsiva).
 
*Podemos usar programas como [http://toki-woki.net/p/Shrink-O-Matic/ Shrink O’Matic] o [http://www.imagemagick.org/ ImageMagick] para generar distintas versiones de nuestras imágenes.
 
*Podemos usar programas como [http://toki-woki.net/p/Shrink-O-Matic/ Shrink O’Matic] o [http://www.imagemagick.org/ ImageMagick] para generar distintas versiones de nuestras imágenes.
 
</div>
 
</div>
Línea 69: Línea 82:
 
**Expires
 
**Expires
 
**Max-Age
 
**Max-Age
[http://betterexplained.com/articles/how-to-optimize-your-site-with-http-caching/ Más información sobre cada uno de los métodos]
+
 
 +
*[http://betterexplained.com/articles/how-to-optimize-your-site-with-http-caching/ Más información sobre cada uno de los métodos]
 +
*[http://cjohansen.no/en/apache/using_a_far_future_expires_header Configurar apache mediante expires]
 
</div>
 
</div>
  
Línea 85: Línea 100:
 
*La compresión de los ficheros suele ser de un 70%.  
 
*La compresión de los ficheros suele ser de un 70%.  
 
*[http://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/ Más información]
 
*[http://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/ Más información]
 +
*[http://www.pontikis.net/blog/speed-up-your-website-with-gzip-compression Cómo configurar Apache para que mande las páginas comprimidas]
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
Línea 137: Línea 153:
 
* Otras opciones: [http://www.asp.net/ajaxlibrary/AjaxMinDocumentation.ashx Microsoft Ajax Minifier]
 
* Otras opciones: [http://www.asp.net/ajaxlibrary/AjaxMinDocumentation.ashx Microsoft Ajax Minifier]
 
</div>
 
</div>
 
  
 
<div class="slide">
 
<div class="slide">
  
===Contenido de la web===
+
===Software para verificar la carga de una página===
*No juzgues un libro por su portada
+
* Yslow (extensión para Google Chrome)
*En una web, si la primera pantalla "no gusta" el usuario no seguirá
+
*Page Speed (de Google)
*Intenta "cortar elementos" si la página tiene scroll para que el usuario lo perciba
+
*[http://www.webpagetest.org/ Tests desde distintas localizaciones]. También se puede usar Chrome Developer Tools o Firebug.
*Utiliza la 3ª regla de Krug:
+
: Reglas de Krug:
+
:1.''“Don’t make me think.”''
+
:2. ''“It doesn’t matter how many times I have to click, as long as each click is a mindless, unambiguous choice.”''
+
:3. ''“Get rid of half the words on each page, then get rid of half of what is left.”''
+
  
 
</div>
 
</div>
 +
 
</div>
 
</div>

Última revisión de 12:03 13 ene 2014

Road Works.svg Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos.
Ver página de charlas.
Road Works.svg




Buenas prácticas para acelerar la carga de una web


Latencia

  • El tiempo de carga y la performance de una página web es muy importante para la experiencia de usuario (UX).
  • Si tu web es lenta, no solo pierdes visitas, sino potenciales clientes.
  • Buscadores como Google tienen en cuanta la velocidad de carga de las webs para sus ranking de búsqueda.
  • ¡Cada milisegundo es importante!

Minimizar los HTTP Request

  • Se cumple la regla del 80/20
  • Según los estudios realizados por Yahoo! el tiempo de carga de una página media depende en un 80% de la parte del cliente y en un 20% de la parte del servidor. Los navegadores de los usuarios dedican la mayor parte del tiempo a descargar imágenes, archivos JavaScript, hojas de estilos CSS y otros recursos externos.
  • Por este motivo, las mejoras en la parte del cliente generan muchos más beneficios que las mejoras en la parte del servidor.

Imágenes

  • Uso de sprites (y también image maps para imágenes contiguas). Ver ejercicios.
  • Elección del tamaño adecuado de las imágenes: el html no debe escalar la imagen.
  • PageSpeed Insights (by Google) directamente da las imágenes optimizadas y también información sobre el tamaño para escalarla (ojo, habrá que correr PageSpeed con UserAgents diferentes si la web es responsiva).
  • Podemos usar programas como Shrink O’Matic o ImageMagick para generar distintas versiones de nuestras imágenes.
  • Uso de atributos: texto alternativo (alt), título de la imagen (title) y width y height.
  • Elige el formato correcto de las imágenes: JPG para imágenes grandes y llenas de colores. GIF y PNG para el resto. Más información
  • Nombres de ficheros de imágenes descriptivos (SEO) y en la medida de lo posible con links (al usuario le gustan y a google también).
  • HAZ DE LA OPTIMIZACIÓN DE IMÁGENES UN HÁBITO.
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot">
div.menu {
    background-image: url('elephant.png');
    background-image:  url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTk
                           SuQmCC');
}

Uso de CDN

  • Es importante la proximidad del servidor web al usuario
  • Un CDN propio es una solución cara. Necesitamos clientes globales para que tenga sentido.
  • Con clientes locales será importante escoger un servidor web con un buen tiempo de respuesta: pocos saltos de red, cercano.
  • Un CDN es sencillo de implementar, pero si nuestra aplicación tiene escrituras a BBDD, el diseño de la arquitectura distribuida puede ser muy complejo.

Cabeceras HTTP y cache

  • Los clientes web almacenan en una caché las páginas que van visitando, sus imagenes, css, etc.
  • Los servidores web indican el tiempo que tiene que estar almacenado en la cache mediante alguna de las siguientes cabeceras:
    • Last Modified
    • ETag
    • Expires
    • Max-Age

Uso de gzip

  • Desde HTTP/1.1 los navegadores pueden indicar en las cabeceras http los formatos de compresión que soportan:
Accept-Encoding: gzip, deflate
  • El servidor web lee dicho header y en función de su configuración, mandará comprimida la página web, indicándolo también en los http headers:
 Content-Encoding: gzip

Colocación de hojas de estilos en la parte superior

  • Las páginas web se deben renderizar de forma progresiva: sirven al usuario para darle un indicador de progreso de carga.
  • Muchos navegadores no renderizan las páginas hasta que no leen todos los css:
    • Así se evitan las penalizaciones en tiempo de ejecutar varios render
    • El usuario mientras tanto ve una página en blanco.
  • Los @import se comportan como los <link> al final de la página en IE, por lo que debemos usar mejor <link>.
  • Se deben evitar expresiones CSS (se utilizaban bastante en IE hasta la versión 8):
background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );
  • Resumiendo... los css siempre en el head y antes de cualquier javascript.

Colocación de scripts en la parte inferior

  • La especificación HTTP/1.1 sugiere que los navegadores no deben descargar más de 2 ficheros de un mismo host de forma simultánea.
  • Cuando las descargas son scripts, se hacen de una en una
  • ¡No siempre se pueden llevar a la parte inferior!

Utilizar JavaScript y CSS externos

  • Si los CSS o JavaScript se utilizan en varias páginas mejor externos
  • El html ocupará menos y los otros ficheros estarán cacheados entre páginas de la web y no consumirán un http request
  • Es negativo para visitantes de una sola página.
  • El mantenimiento es más sencillo, así como la reusabilidad del código.

Reducir peticiones DNS

  • Si utilizamos varios hosts, permitimos descargas simultáneas
  • Si utilizamos varios hosts podemos provocar penalizaciones por búsqueda en dns
  • Los sistemas operativos y los navegadores realizan caches de dns


Uso de versiones minified de JavaScript y CSS

java -jar yuicompressor-x.y.z.jar myfile.js -o myfile-min.js

Software para verificar la carga de una página