25
Kompresja stron internetowych Patryk Jar Tech 3 Camp, 18 czerwca 2013 r.

Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Embed Size (px)

DESCRIPTION

Prezentacja z występu na Tech 3 Camp. Gdynia 18 czerwca 2013 r. Patryk yarpo Jar

Citation preview

Page 1: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Kompresja stron internetowych

Patryk Jar Tech 3 Camp, 18 czerwca 2013 r.

Page 2: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

O mnie

• Patryk Jar

• Webdeveloper

• Nor-sta (nor-sta.eu)

• yarpo.pl

2

Page 3: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

3

Page 4: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Agenda

• Lepszy kod w przeglądarce

• Mniej żądań HTTP

• Mniej danych

• Narzędzia

• Ile możemy zyskać w praktyce?

• Podsumowanie

4

Page 5: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Lepszy kod CSS

• Unikaj @import, CSS expressions

• Szybsze selektory:

a#id → #id

body div → body > div

→ div

5 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 6: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Lepszy kod HTML

• Przeskalowane grafiki

• Zwalczaj „divitis”

• Pliki wystarczy ładować raz

– Ile razy ładujesz jQuery?

• Unikaj błędów 404, 500 itp.

– Nie zostawiaj pustych <img src="" />

6 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 7: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

JS i CSS

<html> <head> <meta charset="utf-8" /> <title>Example.com</title> <link rel="stylesheet" type="text/css" href="x.css"/> <link rel="stylesheet" type="text/css" href="y.css"/> </head> <body> <!-- tu cały kod HTML strony --> <script src="a.js"></script> <script src="b.js"></script> </body> </html>

7 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 8: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Zamiast document.write

document.write('<script src="script.js"></sc'+'ript>');

function loadJS(fileUrl) {

var e = document.createElement("script");

e.async = true;

e.src = fileUrl;

document.body.appendChild(e);

}

8 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 9: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Mniej żądań HTTP

• Content Delivery Network

– Google

– Microsoft

– Wiele, wiele innych

<script src="//ajax.googleapis.com/ajax/ libs/jquery/1.10.1/jquery.min.js"></script>

9 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 10: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Scalanie plików CSS

+ + =

10 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 11: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

CSS Sprite

• Zamiast wielu osobnych plików (6 kB)

• Jeden (4kB)

img { background: url(sprite.png); width: 18px; height: 18px; } #myIcon { background-position: -40px 0; } <img src="blank.png" id="myIcon" />

11 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 12: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

CSS Sprite - zysk

Pojedyncze grafiki CSS Sprite

Liczba żądań HTTP 11 2

Rozmiar danych 6kB 4kB

Czas ~500ms ~150ms

12 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 13: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Grafika jako base64

<img src="blank.png" />

<img src="data:image/png;base64,

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2P8DwQACgAD/il4QJ8AAAAASUVORK5CYII=" />

13 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 14: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Moduły JavaScript

• Moduły JS (np. AMD, CommonJS)

– Wielokrotnie wywoływany moduł = 1 żądanie

– Ładowanie większej liczby plików równolegle

– Scalenie do jednego pliku

14 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 15: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Zapakuj lepiej dane

15 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 16: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

JavaScript przed kompresją

define("dijit/Toolbar", ["require", "dojo/_base/declare", "dojo/has", "dojo/keys", "dojo/ready", "./_Widget", "./_KeyNavContainer", "./_TemplatedMixin"],

function(require, declare, has, keys, ready, _Widget, _KeyNavContainer, _TemplatedMixin){

return declare("dijit.Toolbar", [_Widget, _TemplatedMixin, _KeyNavContainer], {

/* tu jeszcze 10 linii kodu */

templateString: '<div class="dijit" role="toolbar" tabIndex="${tabIndex}" data-dojo-attach-point="containerNode"></div>',

baseClass: "dijitToolbar",

postCreate: function() {

this.inherited(arguments);

this.connectKeyNavHandlers(

this.isLeftToRight() ? [keys.LEFT_ARROW] : [keys.RIGHT_ARROW],

this.isLeftToRight() ? [keys.RIGHT_ARROW] : [keys.LEFT_ARROW]

);

}

});

});

16 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 17: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

JavaScript po kompresji

define("dijit/Toolbar",["require","dojo/_base/declare","dojo/has","dojo/keys","dojo/ready","./_Widget","./_KeyNavContainer","./_TemplatedMixin"],function(_1,_2,_3,_4,_5,_6,_7,_8){ if(_3("dijit-legacy-requires")){ _5(0,function(){ var _9=["dijit/ToolbarSeparator"]; _1(_9); }); }

return _2("dijit.Toolbar",[_6,_8,_7],{templateString:"<div class=\"dijit\" role=\"toolbar\" tabIndex=\"${tabIndex}\" data-dojo-attach-point=\"containerNode\"></div>", baseClass:"dijitToolbar",postCreate:function(){ this.inherited(arguments); this.connectKeyNavHandlers(this.isLeftToRight()?[_4.LEFT_ARROW]:[_4.RIGHT_ARROW],this.isLeftToRight()?[_4.RIGHT_ARROW]:[_4.LEFT_ARROW]); }}); });

17 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 18: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Kompresja JavaScript

Moduł Bez kompresji Skompresowany Zysk

dojo/request/iframe 12kB 7kB 41%

dojo/selector/acme 49kB 13kB 73%

dojo/colors 7kB 5kB 29%

dojo/cookie 3kB 2kB 33%

dijit/MenuItem 7kB 3kB 57%

dijit/Dialog 22kB 9kB 60%

dijit/place 14kB 4kB 71%

tct/widgets/NodeBrowser 11kB 5kB 54%

18 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 19: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

GZIP

19 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 20: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Ciasteczka

• Wysyłane w nagłówku żądania HTTP

• Inna domena na pliki statyczne

• HTML 5: sessionStorage, localStorage

20 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 21: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Narzędzia

• Diagnoza – YSlow – Google PageSpeed Insights

• Kompresja JavaScript – Shrinksafe – JSmin – Closure Compiler

• Kompresja CSS – YUI Compressor

• CSS Sprite – Dowolny edytor, wiele narzędzi online

21 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 22: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Ile Nor-sta zyskała na kompresji?

22 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Prototyp TCT 5.0 Oficjalne wydanie TCT 5.0

Liczba żądań HTTP 250 30

Rozmiar pobranych plików* ~1,2 MB ~300 kB

ready 90 sekund 7 sekund

* - dane przesłane po sieci, w oficjalnym wydaniu były poddane kompresji GZIP

Page 23: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

23

Page 24: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Dziękuję za uwagę

[email protected]

• yarpo.pl

24 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie

Page 25: Kompresja stron internetowych, Tech 3 Camp, Patryk yarpo Jar

Pytania?

25 Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie