SlideShare a Scribd company logo
1 of 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

More Related Content

Viewers also liked

Webinarowy biznes
Webinarowy biznesWebinarowy biznes
Webinarowy biznes3camp
 
,,Zamek" czy ,,gwiazda" ?
,,Zamek" czy ,,gwiazda" ?,,Zamek" czy ,,gwiazda" ?
,,Zamek" czy ,,gwiazda" ?3camp
 
Pióro cyfrowe. Inteligentne ale… pracowite
Pióro cyfrowe. Inteligentne ale… pracowitePióro cyfrowe. Inteligentne ale… pracowite
Pióro cyfrowe. Inteligentne ale… pracowite3camp
 
MongoDB dla administratora
MongoDB dla administratora MongoDB dla administratora
MongoDB dla administratora 3camp
 
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 zakupach3camp
 
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 Europie3camp
 
Od pomysłu do biznesu
Od pomysłu do biznesuOd pomysłu do biznesu
Od pomysłu do biznesu3camp
 
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 Phone3camp
 
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...3camp
 
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 Hadoop3camp
 
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”? 3camp
 
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 sieci3camp
 
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...3camp
 
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 good3camp
 
Jak udokumentować bazę danych
Jak udokumentować bazę danychJak udokumentować bazę danych
Jak udokumentować bazę danych3camp
 
HTTPS bez wymówek
HTTPS bez wymówekHTTPS bez wymówek
HTTPS bez wymówek3camp
 
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 VC3camp
 
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 media3camp
 
Wprowadzenie do knockout.js
Wprowadzenie do knockout.jsWprowadzenie do knockout.js
Wprowadzenie do knockout.js3camp
 
ORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowaniaORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowania3camp
 

Viewers also liked (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 to Kompresja stron internetowych – omówienie technik redukujących rozmiar serwisów internetowych

Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015Tomasz Dziuda
 
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 Pingwinaria2009Logicaltrust pl
 
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, MicrosoftMarcin Zajkowski
 
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ławTomasz Dziuda
 
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
 
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łądziJakub Wiśniewski
 
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 przypadkumsobiegraj
 
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ówTomasz Dziuda
 
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 BuckiPROIDEA
 
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 WordPressaBartosz Romanowski
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Wojciech Klocek
 
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?BarbaraGacaTworek
 
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 SenutoBarbaraGacaTworek
 
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 )GOG.com dev team
 
Optymalizacja Serwisów WWW
Optymalizacja Serwisów WWWOptymalizacja Serwisów WWW
Optymalizacja Serwisów WWWPaweł Harajda
 

Similar to 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
 

More from 3camp

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 poprawek3camp
 
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.3camp
 
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 Android3camp
 
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 aplikacjach3camp
 
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 praktyce3camp
 
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”3camp
 
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 projektu3camp
 
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 ...3camp
 
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?3camp
 
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...3camp
 
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 interdyscyplinarnie3camp
 
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ó...3camp
 
Ł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...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 Model3camp
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API3camp
 
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 zadanie3camp
 
Oculus Rift – zanurzenie w przyszłość
Oculus Rift – zanurzenie w przyszłośćOculus Rift – zanurzenie w przyszłość
Oculus Rift – zanurzenie w przyszłość3camp
 
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łu3camp
 
Bitcoin – waluta globalna
Bitcoin – waluta globalnaBitcoin – waluta globalna
Bitcoin – waluta globalna3camp
 
Is social media next waste?
Is social media next waste?Is social media next waste?
Is social media next waste?3camp
 

More from 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