rimantas liubertas

73
Priverskime tinklalapius krautis greičiau

Upload: darius-leskauskas

Post on 28-Nov-2014

1.077 views

Category:

Documents


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Rimantas Liubertas

Priverskime tinklalapius krautis greičiau

Page 2: Rimantas Liubertas

• Žmonėms patinka ;)

• Amazon: -100ms — 1% daugiau pajamų

• Mozilla: -2.2s — 15.4% daugiau parsisiuntimų

• Yahoo: -400ms — 9% didesnis lankytojų srautas

• Google patinka

Kam to reikia?

Page 3: Rimantas Liubertas

•80-90% laiko — naršyklė krauna komponentus (CSS, JS, IMG)

Page 4: Rimantas Liubertas

•siųsti mažiau

•siųsti greičiau

•pradėti siųsti anksčiau

Page 5: Rimantas Liubertas

•Mažinkite HTTP užklausų skaičių

•2-6 resursai vienu metu

•2-4 domenai

Page 6: Rimantas Liubertas
Page 7: Rimantas Liubertas

•Sujunkite CSS

•Sujunkite JavaScript

•CSS spraitai (sprites)

Mažiau užklausų

Page 8: Rimantas Liubertas

•Sujunkite CSS http://sass-lang.com/

•Sujunkite JavaScript

•CSS spraitai (sprites)

Mažiau užklausų

Page 9: Rimantas Liubertas

•Sujunkite CSS

•Sujunkite JavaScript

•CSS spraitai (sprites)

Mažiau užklausų

Page 10: Rimantas Liubertas

•Sujunkite CSS

•Sujunkite JavaScript

•CSS spraitai (sprites)

Mažiau užklausų

Page 11: Rimantas Liubertas
Page 12: Rimantas Liubertas
Page 13: Rimantas Liubertas
Page 14: Rimantas Liubertas

background-image: url("data:image/gif;base64,R0lGODlhAwADAIAAAP///8zMzCH5BAAAAAAALAAAAAADAAMAAAIEBHIJBQA7");

Data URI

Page 15: Rimantas Liubertas

•CSS į HEAD

•<link>, ne @import

•@media print {…}

•<script> prieš </body>

•Dinaminis Javascript krovimas

Neblokuokite

Page 16: Rimantas Liubertas

•CSS į HEAD

•<link>, ne @import

•@media print {…}

•<script> prieš </body>

•Dinaminis Javascript užkrovimas

Neblokuokite

Page 17: Rimantas Liubertas

var js = document.createElement('script');js.src = 'myscript.js';var head = document.getElementsByTagName('head')[0];head.appendChild(js);

Page 18: Rimantas Liubertas

•YUI Gethttp://developer.yahoo.com/yui/3/get/

•LAB.jshttp://labjs.com/

•RequireJShttp://requirejs.org/

Page 19: Rimantas Liubertas

Mažiau duomenų

•Javascript minimizavimas

•gzip

Page 20: Rimantas Liubertas

Mažiau duomenų

•Javascript minimizavimas

•gzip

Page 21: Rimantas Liubertas

(function(a,b){function ci(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cf(a){if(!b_[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";b_[a]=c}return b_[a]}function ce(a,b){var c={};d.each(cd.concat.apply([],cd.slice(0,b)),function(){c[this]=a});return c}

Page 22: Rimantas Liubertas

•YUI Compressorhttp://developer.yahoo.com/yui/compressor/

•Google Closure Compilerhttp://code.google.com/closure/compiler/

•UglifyJS https://github.com/mishoo/UglifyJS

Page 23: Rimantas Liubertas

Mažiau duomenų

•Javascript minimizavimas

•gzip

Page 24: Rimantas Liubertas

•Last-modified, ETag

•Expires, ExpiresDefault

•Cache-control: max-age

Kešavimas

Page 25: Rimantas Liubertas
Page 26: Rimantas Liubertas

HTTP/1.1 200 OK Last-Modified: Tue, 1 Dec 2010 01:00:00 GMT ETag: "3eeb06e3108ad126c09b2c" Content-Length: 12345GET /resource HTTP/1.1 Host: example.com If-Modified-Since: Tue, 1 Dec 2010 01:00:00 GMT If-None-Match: "3eeb06e3108ad126c09b2c"HTTP/1.1 304 Not Modified

Page 27: Rimantas Liubertas
Page 28: Rimantas Liubertas

Expires: Thu, 09 Apr 2011 14:00:00 GMTExpiresDefault "access plus 10 years"Cache-Control: max-age=3600

Page 29: Rimantas Liubertas
Page 30: Rimantas Liubertas

•Cookies

•Statinis turinys iš atskirų serverių

Ir dar…

Page 31: Rimantas Liubertas

HTML

Page 32: Rimantas Liubertas

•Stenkitės naudoti kuo mažiau elementų

•Naudokite HTML5

Page 33: Rimantas Liubertas

•Stenkitės naudoti kuo mažiau elementų

•Naudokite HTML5

Page 34: Rimantas Liubertas

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>Foo</title> <link href="style.css" rel="stylesheet" type="text/css" /></head><body><p>Bar</p><script type="text/javascript">…</script></body></html>

XHTML

Page 35: Rimantas Liubertas

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>Foo</title> <link href="style.css" rel="stylesheet" type="text/css" /></head><body><p>Bar</p><script type="text/javascript">…</script></body></html>

XHTML

Page 36: Rimantas Liubertas

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Foo</title> <link href="style.css" rel="stylesheet"></head><body><p>Bar</p><script> …</script></body></html>

HTML5

Page 37: Rimantas Liubertas

Grafiniai elementai

Page 38: Rimantas Liubertas

• Pasirinkite tinkamą formatą (GIF beveik niekada netinkamas)

• Nedarykite „optimizacijos“ HTML (arba CSS)

• PNG

• Venkite MS filtrų

• Optimizuokite — JPEG kokybė, PNG spalvų skaičius

• Optimizuokite (pngcrush, optpng, pngout, jpegtran, gifsicle)

• Jokios grafikos — CSS3

Page 39: Rimantas Liubertas

• Pasirinkite tinkamą formatą (GIF beveik niekada netinkamas)

• Nedarykite „optimizacijos“ HTML (arba CSS)

• PNG

• Venkite MS filtrų

• Optimizuokite — JPEG kokybė, PNG spalvų skaičius

• Optimizuokite (pngcrush, optpng, pngout, jpegtran, gifsicle)

• Jokios grafikos — CSS3

Page 40: Rimantas Liubertas

•JPEG — nuotraukos, gradientai

•PNG — visam kitam ;)

•GIF — animacija, maži elementai

Page 41: Rimantas Liubertas

JPEG FAIL

Page 42: Rimantas Liubertas

• Pasirinkite tinkamą formatą (GIF beveik niekada netinkamas)

• Nedarykite „optimizacijos“ HTML (arba CSS)

• PNG

• Venkite MS filtrų

• Optimizuokite — JPEG kokybė, PNG spalvų skaičius

• Optimizuokite (pngcrush, optpng, pngout, jpegtran, gifsicle)

• Jokios grafikos — CSS3

Page 43: Rimantas Liubertas
Page 44: Rimantas Liubertas
Page 45: Rimantas Liubertas
Page 46: Rimantas Liubertas

• Pasirinkite tinkamą formatą (GIF beveik niekada netinkamas)

• Nedarykite „optimizacijos“ HTML (arba CSS)

• PNG

• Venkite MS filtrų

• Optimizuokite — JPEG kokybė, PNG spalvų skaičius

• Optimizuokite (pngcrush, optpng, pngout, jpegtran, gifsicle)

• Jokios grafikos — CSS3

Page 47: Rimantas Liubertas

• Pasirinkite tinkamą formatą (GIF beveik niekada netinkamas)

• Nedarykite „optimizacijos“ HTML (arba CSS)

• PNG

• Venkite MS filtrų

• Optimizuokite — JPEG kokybė, PNG spalvų skaičius

• Optimizuokite (pngcrush, optpng, pngout, jpegtran, gifsicle)

• Jokios grafikos — CSS3

Page 48: Rimantas Liubertas

• Pasirinkite tinkamą formatą (GIF beveik niekada netinkamas)

• Nedarykite „optimizacijos“ HTML (arba CSS)

• PNG

• Venkite MS filtrų

• Optimizuokite — JPEG kokybė, PNG spalvų skaičius

• Optimizuokite (pngcrush, optpng, pngout, jpegtran, gifsicle)

• Jokios grafikos — CSS3

Page 49: Rimantas Liubertas

7448 baitai

Page 50: Rimantas Liubertas
Page 51: Rimantas Liubertas

1322 baitai

Page 52: Rimantas Liubertas

• Pasirinkite tinkamą formatą (GIF beveik niekada netinkamas)

• Nedarykite „optimizacijos“ HTML (arba CSS)

• PNG

• Venkite MS filtrų

• Optimizuokite — JPEG kokybė, PNG spalvų skaičius

• Optimizuokite (pngcrush, optpng, pngout, jpegtran, gifsicle)

• Jokios grafikos — CSS3

Page 53: Rimantas Liubertas

• Pasirinkite tinkamą formatą (GIF beveik niekada netinkamas)

• Nedarykite „optimizacijos“ HTML (arba CSS)

• PNG

• Venkite MS filtrų

• Optimizuokite — JPEG kokybė, PNG spalvų skaičius

• Optimizuokite (pngcrush, optpng, pngout, jpegtran, gifsicle)

• Jokios grafikos — CSS3

Page 54: Rimantas Liubertas

http://ubuwaits.github.com/css3-buttons/

Page 55: Rimantas Liubertas

CSS3• border-radius \o/

• gradientai

• RGBA

• box-shadow

• text-shadow

• border-image

• transformacijos, animacija

• -moz-, -webkit-, -o-, -ms-

Page 56: Rimantas Liubertas

JavaScript (jQuery)

Page 57: Rimantas Liubertas

•Naudokite naujausias bibliotekų versijas

•Kešuokite!

•Ribokite DOM manipuliacijų skaičių.

•Venkite DOM operacijų cikle

•.delegate()

Page 58: Rimantas Liubertas

•Naudokite naujausias bibliotekų versijas

•Kešuokite!

•Ribokite DOM manipuliacijų skaičių.

•Venkite DOM operacijų cikle

•.delegate()

Page 59: Rimantas Liubertas

•Naudokite naujausias bibliotekų versijas

•Kešuokite!

•Ribokite DOM manipuliacijų skaičių.

•Venkite DOM operacijų cikle

•.delegate()

Page 60: Rimantas Liubertas

$('#something').html('yeah!');$('#something').css('color', '#BADA55');$('#something').bind('click', function(){…});

Page 61: Rimantas Liubertas

var $something = $('#something');$something.html('yeah!');$something.css('color', '#BADA55');$something.bind('click', function(){…});

Page 62: Rimantas Liubertas

$something.html('yeah!') .css('color', '#BADA55') .bind('click', function(){…});

Page 63: Rimantas Liubertas

•Naudokite naujausias bibliotekų versijas

•Kešuokite!

•Ribokite DOM manipuliacijų skaičių.

•Venkite DOM operacijų cikle

•.delegate()

Page 64: Rimantas Liubertas

•Naudokite naujausias bibliotekų versijas

•Kešuokite!

•Ribokite DOM manipuliacijų skaičių.

•Venkite DOM operacijų cikle

•.delegate()

Page 65: Rimantas Liubertas

for (var i=0; i<some_list.length; i++) { $('<li/>').html(some_list[i]).appendTo($('#myul'));};

Page 66: Rimantas Liubertas

str = '';for (var i = 0, l = some_list.length; i < l; i++){ str += '<li>' + some_list[i] + '</li>';}$('#myul').html(str);

Page 67: Rimantas Liubertas

str = '<ul>';for (var i = 0, l = some_list.length; i < l; i++){ str += '<li>' + some_list[i] + '</li>';}$('#myul').replaceWith(str + '</ul>');

Page 68: Rimantas Liubertas

•Naudokite naujausias bibliotekų versijas

•Kešuokite!

•Ribokite DOM manipuliacijų skaičių.

•Venkite DOM operacijų cikle

•.delegate()

Page 69: Rimantas Liubertas

$("table").delegate("td", "hover", function(){ $

(this).toggleClass("hover");});

Page 70: Rimantas Liubertas

Įrankiai

Page 71: Rimantas Liubertas

•Firebughttp://getfirebug.com/

•Yslowhttp://developer.yahoo.com/yslow/

•PageSpeedhttp://code.google.com/speed/page-speed/

•Webkit Inspector

•dynaTracehttp://ajax.dynatrace.com/

Page 72: Rimantas Liubertas

•Expires

•gzip

•Mažiau HTTP užklausų

Svarbiausia:

Page 73: Rimantas Liubertas

Viskas. Ačiū :)