Este documento discute otimizações para melhorar o desempenho do lado do cliente em sites. Algumas das principais dicas incluem agrupar arquivos CSS e JavaScript em arquivos únicos e cacheados, usar sprites CSS para imagens, reduzir o número de conexões HTTP desnecessárias e minimizar arquivos.
20. Redução de 2 para 1 segundo em load time,
reduziu Exit Rate
de 15% para 10%
21. “When an interface is faster, you feel
good.
You feel in control.
The web app isn't controlling me, I'm
controlling it.”
Matt Mullenweg
(Criador do Wordpress)
23. STEVE SOUDERS
- Trabalha para o Google em
iniciativas de performance
Web e Open Source;
- Ex-Yahoo e criador do
plugin YSlow;
- Palestrante em
conferências como OSCON,
Web 2.0 Expo e Velocity.
57. USAR CONTROLES DE CACHE
Sem isto usuários visitam
um site baixando
as mesmas imagens, scripts e CSS
(que raramente são atualizados)
todas as vezes que acessam o site
64. MAX_AGE
Define que o
conteúdo
de uma página
é válido
por N segundos
Cache-Control: max-age=600
(se o botão Refresh for usado,
o browser baixa o conteúdo novamente)
65. ETAG
É uma chave para verificar
se uma página ainda é a mesma
Etag: "620b360455bf03e96951d2…"
66.
67. LAST_MODIFIED
Quando uma página
foi modificada pela última vez?
68.
69. GZIPAR COMPONENTES
CSS, HTML, Scripts
(imagens, PDF, Flash já são compactados)
83. JQUERY 1.3.2 (Sem compressão)
(function(){
var
// Will speed up references to window, and allows munging its name.
window = this,
// Will speed up references to undefined, and allows munging its name.
undefined,
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,
jQuery = window.jQuery = window.$ = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
},
(…)
90. Exemplo:
Usuário baixa lista de contatos no Gmail.
Se esta lista não muda frequentemente,
esta resposta Ajax deve estar cacheada
no browser.
E devidamente identificada com um
serial na URL, para diferenciar quando
houver uma atualização na lista de
contatos.
97. UNCONDITIONAL PRELOAD
Assim que o evento “onLoad” é
disparado, sua página começa a baixar
alguns componentes extras.
98. Google.com: uma sprite image
é carregada no “onLoad”.
Esta imagem não é usada em
google.com, mas somente nas páginas
seguintes, no resultado da busca.
99. CONDITIONAL PRELOAD
Baseado na ação do usuário a página faz
um “chute” para onde o usuário deverá
ir em seguida, e carrega previamente os
componentes necessários.
100. Search.yahoo.com: você pode ver
como alguns componentes extras são
requisitados depois que você começa a
digitar na caixa de busca.
102. Usuários visitando site novo com empty
cache.
Pré-carregar componentes ainda no site
antigo, enquanto o browser está ocioso,
requisitando imagens e scripts que
serão usados no layout novo.
106. O evento “onLoad” só é disparado
quando o browser termina de carregar
todos os iframes, e os componentes
dentro destes iframes.
Até lá, o browser mostra o ícone de
“ocupado”, e o usuário tem a sensação
de site mais lento.
110. Eliminar quando não for necessário
Reduzir tamanho
Somente para informações estritamente
necessárias (dados da sessão devem
ficar no banco de dados)
111. DOMÍNIOS SEM COOKIES
PARA COMPONENTES
Browser não deve enviar cookies ao
requisitar css, scripts e imagens
113. EVENT HANDLING
Atachar eventos
a vários links
dentro de um DIV
114. PROBLEMAS
Muitos eventos atachados
Memory Leaks
Possibilidade alta de crash
Degradação de performance
Precisa atachar eventos novamente,
caso o DOM mude
116. VANTAGENS
Usa menos memória
Página fica mais ágil
Fácil de usar
Eventos centralizados em um único
trecho de código (manutenção)
117. // event delegation
var setup = function() {
document.onclick = function(e) {
e = e || window.event;
var t = e.target || e.srcElement;
// Pegando um link dentro de uma lista
if (t.nodeName.toLowerCase() === 'a‘ &&
t.parentNode.getElementsByTagName('ul').length>0) {
doSomethingElse();
}
return false;
}
};
window.onload = setup;
129. Arranjar imagens horizontalmente
geralmente resulta em arquivos
menores
Manter cores similares dentro do sprite,
idealmente dentro de 256 cores, para
usar PNG8
146. BLOGS
High Performance Web Sites blog
http://www.stevesouders.com/blog/
147. VÍDEOS
Curso - High Performance Web Sites
http://www.stevesouders.com/blog/200
9/05/20/stanford-videos-available/
Speed Up Your JavaScript
http://www.youtube.com/watch?v=mHt
dZgou0qU