SlideShare una empresa de Scribd logo
1 de 24
Kompresja stron internetowych
Patryk Jar
Tech 3 Camp, 18 czerwca 2013 r.
O mnie
• Patryk Jar
• Webdeveloper
• Nor-sta (nor-sta.eu)
• yarpo.pl
2
3
Agenda
• Lepszy kod w przeglądarce
• Mniej żądao HTTP
• Mniej danych
• Narzędzia
• Ile możemy zyskad w praktyce?
• Podsumowanie
4
Lepszy kod CSS
• Unikaj @import, CSS expressions
• Szybsze selektory:
a#id → #id
body div → body > div
→ div
5Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
Lepszy kod HTML
• Przeskalowane grafiki
• Zwalczaj „divitis”
• Pliki wystarczy ładowad raz
– Ile razy ładujesz jQuery?
• Unikaj błędów 404, 500 itp.
– Nie zostawiaj pustych <img src="" />
6Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
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>
7Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
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);
}
8Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
Mniej żądao HTTP
• Content Delivery Network
– Google
– Microsoft
– Wiele, wiele innych
<script src="//ajax.googleapis.com/ajax/
libs/jquery/1.10.1/jquery.min.js"></script>
9Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie
Scalanie plików CSS
+ + =
10Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie
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" />
11Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie
CSS Sprite - zysk
Pojedyncze grafiki CSS Sprite
Liczba żądao HTTP 11 2
Rozmiar danych 6kB 4kB
Czas ~500ms ~150ms
12Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie
Grafika jako base64
<img src="blank.png" />
<img src="data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCA
YAAAAfFcSJAAAAC0lEQVQIW2P8DwQACgAD
/il4QJ8AAAAASUVORK5CYII=" />
13Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie
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
14Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie
Zapakuj lepiej dane
15Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
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]
);
}
});
});
16Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
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.isLef
tToRight()?[_4.RIGHT_ARROW]:[_4.LEFT_ARROW]); }}); });
17Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
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%
18Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
GZIP
19Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
Ciasteczka
• Wysyłane w nagłówku żądania HTTP
• Inna domena na pliki statyczne
• HTML 5: sessionStorage, localStorage
20Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
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
21Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
Ile Nor-sta zyskała na kompresji?
22Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
Prototyp TCT 5.0 Oficjalne wydanie TCT 5.0
Liczba żądao HTTP 250 27
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
Dziękuję za uwagę
• Jar.Patryk@gmail.com
• yarpo.pl
23Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
Pytania?
24Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie

Más contenido relacionado

Destacado

Destacado (20)

Webinarowy biznes
Webinarowy biznesWebinarowy biznes
Webinarowy biznes
 
,,Zamek" czy ,,gwiazda" ?
,,Zamek" czy ,,gwiazda" ?,,Zamek" czy ,,gwiazda" ?
,,Zamek" czy ,,gwiazda" ?
 
Pióro cyfrowe. Inteligentne ale… pracowite
Pióro cyfrowe. Inteligentne ale… pracowitePióro cyfrowe. Inteligentne ale… pracowite
Pióro cyfrowe. Inteligentne ale… pracowite
 
MongoDB dla administratora
MongoDB dla administratora MongoDB dla administratora
MongoDB dla administratora
 
Artur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupachArtur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupach
 
Z zubibu.com po Polsce i Europie
Z zubibu.com po Polsce i EuropieZ zubibu.com po Polsce i Europie
Z zubibu.com po Polsce i Europie
 
Od pomysłu do biznesu
Od pomysłu do biznesuOd pomysłu do biznesu
Od pomysłu do biznesu
 
Tworzenie wydajnych aplikacji na platformę Windows Phone
Tworzenie wydajnych aplikacji na platformę Windows PhoneTworzenie wydajnych aplikacji na platformę Windows Phone
Tworzenie wydajnych aplikacji na platformę Windows Phone
 
Flipped Clasroom – praktyczne wykorzystanie wad i zalet technologii w nauczan...
Flipped Clasroom – praktyczne wykorzystanie wad i zalet technologii w nauczan...Flipped Clasroom – praktyczne wykorzystanie wad i zalet technologii w nauczan...
Flipped Clasroom – praktyczne wykorzystanie wad i zalet technologii w nauczan...
 
Przetwarzanie BigData w chmurze z wykorzystaniem Apache Hadoop
Przetwarzanie BigData w chmurze z wykorzystaniem Apache HadoopPrzetwarzanie BigData w chmurze z wykorzystaniem Apache Hadoop
Przetwarzanie BigData w chmurze z wykorzystaniem Apache Hadoop
 
Dlaczego Commerce staje się coraz bardziej „Smarter”?
 Dlaczego Commerce staje się coraz bardziej „Smarter”?  Dlaczego Commerce staje się coraz bardziej „Smarter”?
Dlaczego Commerce staje się coraz bardziej „Smarter”?
 
Wyjdź z kiosku – dystrybucja treści w sieci
Wyjdź z kiosku – dystrybucja treści w sieciWyjdź z kiosku – dystrybucja treści w sieci
Wyjdź z kiosku – dystrybucja treści w sieci
 
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
 
Learn you some rx for the greater good
Learn you some rx for the greater goodLearn you some rx for the greater good
Learn you some rx for the greater good
 
Jak udokumentować bazę danych
Jak udokumentować bazę danychJak udokumentować bazę danych
Jak udokumentować bazę danych
 
HTTPS bez wymówek
HTTPS bez wymówekHTTPS bez wymówek
HTTPS bez wymówek
 
Inwestowanie w technologie mobilne z punktu widzenia funduszu VC
 Inwestowanie w technologie mobilne z punktu widzenia funduszu VC Inwestowanie w technologie mobilne z punktu widzenia funduszu VC
Inwestowanie w technologie mobilne z punktu widzenia funduszu VC
 
Współpraca w sieci. Budowanie marki poprzez social media
Współpraca w sieci. Budowanie marki poprzez social mediaWspółpraca w sieci. Budowanie marki poprzez social media
Współpraca w sieci. Budowanie marki poprzez social media
 
Wprowadzenie do knockout.js
Wprowadzenie do knockout.jsWprowadzenie do knockout.js
Wprowadzenie do knockout.js
 
ORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowaniaORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowania
 

Similar a Kompresja stron internetowych – omówienie technik redukujących rozmiar serwisów internetowych

Dive into HTML5 - Marcin Zajkowski @ SNT, Microsoft
Dive into HTML5 - Marcin Zajkowski @ SNT, MicrosoftDive into HTML5 - Marcin Zajkowski @ SNT, Microsoft
Dive into HTML5 - Marcin Zajkowski @ SNT, Microsoft
Marcin Zajkowski
 
The story of GOG.com Cache - PHPers 2014 ( PL )
 The story of GOG.com Cache - PHPers 2014 ( PL ) The story of GOG.com Cache - PHPers 2014 ( PL )
The story of GOG.com Cache - PHPers 2014 ( PL )
GOG.com dev team
 
Gaca-Tworek Barbara: JavaScript SEO w praktyce: Webinar Senuto
Gaca-Tworek Barbara: JavaScript SEO w praktyce: Webinar SenutoGaca-Tworek Barbara: JavaScript SEO w praktyce: Webinar Senuto
Gaca-Tworek Barbara: JavaScript SEO w praktyce: Webinar Senuto
BarbaraGacaTworek
 
Optymalizacja Serwisów WWW
Optymalizacja Serwisów WWWOptymalizacja Serwisów WWW
Optymalizacja Serwisów WWW
Paweł Harajda
 

Similar a Kompresja stron internetowych – omówienie technik redukujących rozmiar serwisów internetowych (20)

Feo w-joomla
Feo w-joomlaFeo w-joomla
Feo w-joomla
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015
 
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
 
Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
Dive into HTML5 - Marcin Zajkowski @ SNT, Microsoft
Dive into HTML5 - Marcin Zajkowski @ SNT, MicrosoftDive into HTML5 - Marcin Zajkowski @ SNT, Microsoft
Dive into HTML5 - Marcin Zajkowski @ SNT, Microsoft
 
Za darmo nie umarło - WordCamp Wrocław
Za darmo nie umarło - WordCamp WrocławZa darmo nie umarło - WordCamp Wrocław
Za darmo nie umarło - WordCamp Wrocław
 
The story of GOG.com Cache - PHPers 2014 ( PL )
 The story of GOG.com Cache - PHPers 2014 ( PL ) The story of GOG.com Cache - PHPers 2014 ( PL )
The story of GOG.com Cache - PHPers 2014 ( PL )
 
Responsive Web Design - kto mało pyta, nie błądzi
Responsive Web Design - kto mało pyta, nie błądziResponsive Web Design - kto mało pyta, nie błądzi
Responsive Web Design - kto mało pyta, nie błądzi
 
Anatomy of RTB auction
Anatomy of RTB auctionAnatomy of RTB auction
Anatomy of RTB auction
 
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuDrobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
 
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp KrakówJak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
 
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
 
W3 Total Cache - skuteczne przyśpieszanie WordPressa
W3 Total Cache - skuteczne przyśpieszanie WordPressaW3 Total Cache - skuteczne przyśpieszanie WordPressa
W3 Total Cache - skuteczne przyśpieszanie WordPressa
 
Jaki hosting pod wordpressa
Jaki hosting pod wordpressaJaki hosting pod wordpressa
Jaki hosting pod wordpressa
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
 
Jak ładujemy skrypty JS i jakie ma to znaczenie?
Jak ładujemy skrypty JS i jakie ma to znaczenie?Jak ładujemy skrypty JS i jakie ma to znaczenie?
Jak ładujemy skrypty JS i jakie ma to znaczenie?
 
Gaca-Tworek Barbara: JavaScript SEO w praktyce: Webinar Senuto
Gaca-Tworek Barbara: JavaScript SEO w praktyce: Webinar SenutoGaca-Tworek Barbara: JavaScript SEO w praktyce: Webinar Senuto
Gaca-Tworek Barbara: JavaScript SEO w praktyce: Webinar Senuto
 
The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )The story of GOG.com Cache - 4developers 2014 ( PL )
The story of GOG.com Cache - 4developers 2014 ( PL )
 
Optymalizacja Serwisów WWW
Optymalizacja Serwisów WWWOptymalizacja Serwisów WWW
Optymalizacja Serwisów WWW
 
W 3 sekundy do setki
W 3 sekundy do setkiW 3 sekundy do setki
W 3 sekundy do setki
 

Más de 3camp

Marcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk ModelMarcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk Model
3camp
 

Más de 3camp (20)

Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawekOchrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
 
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
 
Wykorzystanie języka Kotlin do aplikacji na platformie Android
Wykorzystanie języka Kotlin do aplikacji na platformie AndroidWykorzystanie języka Kotlin do aplikacji na platformie Android
Wykorzystanie języka Kotlin do aplikacji na platformie Android
 
Google App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjachGoogle App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjach
 
Reakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyceReakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyce
 
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
 
AngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektuAngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektu
 
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
 
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
 
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
 
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnieMarcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
 
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
 
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
 
Marcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk ModelMarcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk Model
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API
 
Ostatnia faza produktu: co się dzieję kiedy programista zakończył swoje zadanie
Ostatnia faza produktu: co się dzieję kiedy programista zakończył swoje zadanieOstatnia faza produktu: co się dzieję kiedy programista zakończył swoje zadanie
Ostatnia faza produktu: co się dzieję kiedy programista zakończył swoje zadanie
 
Oculus Rift – zanurzenie w przyszłość
Oculus Rift – zanurzenie w przyszłośćOculus Rift – zanurzenie w przyszłość
Oculus Rift – zanurzenie w przyszłość
 
Druk 3d w służbie medycyny i przemysłu
 Druk 3d w służbie medycyny i przemysłu Druk 3d w służbie medycyny i przemysłu
Druk 3d w służbie medycyny i przemysłu
 
Bitcoin – waluta globalna
Bitcoin – waluta globalnaBitcoin – waluta globalna
Bitcoin – waluta globalna
 
Is social media next waste?
Is social media next waste?Is social media next waste?
Is social media next waste?
 

Kompresja stron internetowych – omówienie technik redukujących rozmiar serwisów internetowych

  • 1. Kompresja stron internetowych Patryk Jar Tech 3 Camp, 18 czerwca 2013 r.
  • 2. O mnie • Patryk Jar • Webdeveloper • Nor-sta (nor-sta.eu) • yarpo.pl 2
  • 3. 3
  • 4. Agenda • Lepszy kod w przeglądarce • Mniej żądao HTTP • Mniej danych • Narzędzia • Ile możemy zyskad w praktyce? • Podsumowanie 4
  • 5. Lepszy kod CSS • Unikaj @import, CSS expressions • Szybsze selektory: a#id → #id body div → body > div → div 5Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
  • 6. Lepszy kod HTML • Przeskalowane grafiki • Zwalczaj „divitis” • Pliki wystarczy ładowad raz – Ile razy ładujesz jQuery? • Unikaj błędów 404, 500 itp. – Nie zostawiaj pustych <img src="" /> 6Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
  • 7. 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> 7Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
  • 8. 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); } 8Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
  • 9. Mniej żądao HTTP • Content Delivery Network – Google – Microsoft – Wiele, wiele innych <script src="//ajax.googleapis.com/ajax/ libs/jquery/1.10.1/jquery.min.js"></script> 9Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie
  • 10. Scalanie plików CSS + + = 10Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie
  • 11. 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" /> 11Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie
  • 12. CSS Sprite - zysk Pojedyncze grafiki CSS Sprite Liczba żądao HTTP 11 2 Rozmiar danych 6kB 4kB Czas ~500ms ~150ms 12Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie
  • 13. Grafika jako base64 <img src="blank.png" /> <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCA YAAAAfFcSJAAAAC0lEQVQIW2P8DwQACgAD /il4QJ8AAAAASUVORK5CYII=" /> 13Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie
  • 14. 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 14Lepszy kod / Mniej żądań / Mniej danych / Zysk / Podsumowanie
  • 15. Zapakuj lepiej dane 15Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
  • 16. 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] ); } }); }); 16Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
  • 17. 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.isLef tToRight()?[_4.RIGHT_ARROW]:[_4.LEFT_ARROW]); }}); }); 17Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
  • 18. 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% 18Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
  • 19. GZIP 19Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
  • 20. Ciasteczka • Wysyłane w nagłówku żądania HTTP • Inna domena na pliki statyczne • HTML 5: sessionStorage, localStorage 20Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
  • 21. 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 21Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
  • 22. Ile Nor-sta zyskała na kompresji? 22Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie Prototyp TCT 5.0 Oficjalne wydanie TCT 5.0 Liczba żądao HTTP 250 27 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
  • 23. Dziękuję za uwagę • Jar.Patryk@gmail.com • yarpo.pl 23Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie
  • 24. Pytania? 24Lepszy kod / Mniej żądao / Mniej danych / Zysk / Podsumowanie