SlideShare uma empresa Scribd logo
1 de 18
Przyspieszanie działania
    serwisów WWW




               Michał Felski
               michal.felski@gforces.pl
www.adobe.com

Czas ładowania strony: 7,903s

html: 849 ms (10,7 %)




       1.5Mbps ADSL
sklep.etpro.pl


Czas ładowania strony: 5.583s

html: 816 ms (14,6 %)




      1.5Mbps ADSL
www.gratka.pl


Czas ładowania strony: 9,796s

html: 915 ms (9,3 %)




      1.5Mbps ADSL
Jak najmniej żądań

  łączenie skryptów
  łączenie CSS
  mapy obrazkowe
  obrazy CSS sprites
  osadzone obrazy
  preload i post-load
Jak najmniej żądań – mapy obrazkowe



   server-side
<a href=quot;toolbar.phpquot;><img ismap=”ismap” src=quot;toolbar.gifquot; /></a>
→ http://toolbar.php?127,13


   client-side
<img usemap=quot;#map1quot; border=0 src=quot;toolbar.gifquot; />
<map name=quot;map1quot;>
  <area shape=quot;rectquot; coords=quot;0,0,31,31quot; href=quot;add.phpquot; title=quot;Add filequot;>
   …
</map>
Jak najmniej żądań – obrazy CSS sprites
                                        <span style=”
                                         width: 32px; height: 32px;
                                         background-image: url('sprites.gif');
                                         background-position: -260px -90px;quot;>
                                        </span>




      Rozmiar jednego obrazka jest mniejszy niż kliku mniejszych
Jak najmniej żądań – osadzone obrazy

<IMG ALT=”star”
SRC=quot;data:image/gif;base64,R0lGODlhDAAMALMLA
  PN8ffBiYvWWlvrKy/FvcPewsO9VVfajo+w6O/zl5est
  Lv/8/AAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAMAAw
  AAAQzcElZyryTEHyTUgknHd9xGV+qKsYirKkwDYiKDB
  iatt2H1KBLQRFIJAIKywRgmhwAIlEEADs=quot;>




                  IE dopiero od IE 8
             Firefox akceptuje do 100 KB
Jak najmniej żądań
 Witryna internetowa   JS   CSS   Obrazy   Liczba żądań   Rozmiar [KB]
 allegro.pl             6    1      19          36           111
 fotka.pl              11    2      34          50           149
 google.pl              1    0      2            5            22
 interia.pl             9    1     128          142          437
 nasza-klasa.pl        18    6      30          58           315
 onet.pl                2    0      72          90           734
 wikipedia.org         13    12     32          58           289
 wp.pl                  2    0      89          101          583
 youtube.com            4    1      20          28           147


 adobe.com             16   11     36          66             852
 sklep.etpro.pl         2   3      16          22             158
 gratka.pl             15   4      36          62             289
Pamięć podręczna
   Witryna internetowa     Liczba żądań       Liczba żądań
                         z pustym buforem   z pełnym buforem

   allegro.pl                   36                 3
   fotka.pl                     50                16
   google.pl                    5                  2
   interia.pl                  142                27
   nasza-klasa.pl               58                13
   onet.pl                      90                13
   wikipedia.org                58                 3
   wp.pl                       101                18
   youtube.com                  28                12


   adobe.com                   66                 16
   sklep.etpro.pl              22                  1
   gratka.pl                   62                 13
Pamięć podręczna
 Expires: Tue, 09 Mar 2010 19:15:02 GMT

 Cache-Control: max-age=31104000



Nazwy plików przy wykorzystaniu cache
global.css?123608120        reklama.js?20090310    123603675_image.gif



Konfiguracja nagłówka ETag
ETag: quot;c8897e-aee-4165acf0quot;
Last-Modified: Thu, 07 Oct 2004 20:54:08 GMT

If-None-Match: quot;c8897e-aee-4165acf0quot;
If-Modified-Since: Thu, 07 Oct 2004 20:54:08 GMT

FileETag INode MTime Size
FileETag none
Optymalizacja skryptów i CSS
    Zewnętrzne skrypty CSS
    CSS jak najwyżej (sekcja HEAD)
    LINK zamiast @import
    unikać wyrażeń w CSS
    skrypty jak najniżej (przed </body>)
    minimalizacja skryptów i CSS
    unikać duplikowania skryptów

body {
width: expression(document.body.clientWidth < 600 ? “600px”:“auto” );
width-min: 600px;
}
Optymalizacja obrazów
    optymalna liczba kolorów
# identify -verbose image.gif

    PNG zamiast GIF
# convert image.gif image.png

    optymalizacja PNG
# pngcrush image.png -rem alla -reduce -brute result.png

    optymalizacja JPG
# jpegtran -copy none -optimize -perfect src.jpg dest.jpg

    nie skalować obrazów w html
<img width=quot;100quot; height=quot;100quot; src=quot;image.jpgquot; alt=quot;quot; />

    obiekty poniżej 25K
Optymalizacja zapytań

    Rozpraszanie zapytań na kilka domen
(yimg.com, ytimg.com, images-amazon.com)

    redukcja zapytań DNS
(przeciętnie 20-120 ms na zapytanie, blokada równoległego pobierania obiektów)

    redukcja przekierowań
    buforowanie zapytań AJAX
    GET zamiast POST
    unikanie błędu 404
    kompresja gzip
Kompresja odpowiedzi (GZIP)


   Zmniejsza czas pobierania treści
   Wspierane przez ponad 90% przeglądarek
   Niezalecane dla obrazków i PDF
   Kompresja czy obsługa proxy?


                                 Buforowanie proxy:
Żądanie HTTP
Accept-Encoding: gzip, deflate
                                 Vary: Accept-Encoding
                                 Vary: Accept-Encoding, User-Agent
Odpowiedź HTTP                   Vary: *
Content-Encoding: gzip           Cache-Control: private
CDN – Content Delivery Network




Akamai, Limelight, SAVVIS, Mirror Image
ValueCDN, Hostway, Amazon CloudFront
CoralCDN, CoDeeN
Globule
TP
http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js
YSlow




 http://developer.yahoo.com/yslow/
YSlow - wyniki
        TOP 10 Polska                     TOP 10 Global

                                 Witryna internetowa      Wynik
Witryna internetowa     Wynik
                                                          C (71)
                                 blogger.com
allegro.pl              B (81)
                                                          C (79)
                                 facebook.com
fotka.pl                F (57)
                                                          A (96)
                                 google.com
google.pl               A (95)
                                                          A (97)
                                 live.com
interia.pl              F (54)
                                                          F (49)
                                 msn.com
nasza-klasa.pl          F (43)
                                                          D (64)
                                 myspace.com
onet.pl                 F (44)
                                 orkut.com                A (98)
wikipedia.org           D (68)
                                                          D (68)
                                 wikipedia.org
wp.pl                   F (48)                            A (96)
                                 yahoo.com
youtube.com             D (67)                            D (67)
                                 youtube.com

adobe.com               F (29)
sklep.etpro.pl          B (88)
gratka.pl               F (41)

Mais conteúdo relacionado

Destaque

Design patterns in distributed system
Design patterns in distributed systemDesign patterns in distributed system
Design patterns in distributed systemTom Huynh
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startSages
 
1. Introduction PM1
1. Introduction PM11. Introduction PM1
1. Introduction PM1Kombo Ernest
 
Нагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOpsНагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOpsSQALab
 
Functors, Applicatives and Monads In Scala
Functors, Applicatives and Monads In ScalaFunctors, Applicatives and Monads In Scala
Functors, Applicatives and Monads In ScalaKnoldus Inc.
 
Requisitos Certificação de Entidades Formadoras
Requisitos Certificação de Entidades FormadorasRequisitos Certificação de Entidades Formadoras
Requisitos Certificação de Entidades FormadorasRosario Cação
 
Поиск багов при тестировании переходов с веба в мобильное приложение
Поиск багов при тестировании переходов с веба в мобильное приложениеПоиск багов при тестировании переходов с веба в мобильное приложение
Поиск багов при тестировании переходов с веба в мобильное приложениеSQALab
 
Building Reactive Applications With Akka And Java
Building Reactive Applications With Akka And JavaBuilding Reactive Applications With Akka And Java
Building Reactive Applications With Akka And JavaTu Pham
 
UI Rendering at Wayfair
UI Rendering at WayfairUI Rendering at Wayfair
UI Rendering at WayfairAndrew Rota
 
Effectively Monitoring Client-Side Performance
Effectively Monitoring Client-Side PerformanceEffectively Monitoring Client-Side Performance
Effectively Monitoring Client-Side PerformanceAndrew Rota
 
[devops REX 2016] Soyez réalistes, demandez l’impossible !
[devops REX 2016] Soyez réalistes, demandez l’impossible ![devops REX 2016] Soyez réalistes, demandez l’impossible !
[devops REX 2016] Soyez réalistes, demandez l’impossible !devops REX
 

Destaque (12)

Design patterns in distributed system
Design patterns in distributed systemDesign patterns in distributed system
Design patterns in distributed system
 
Game Development: an Unexpected Journey
Game Development: an Unexpected JourneyGame Development: an Unexpected Journey
Game Development: an Unexpected Journey
 
Budowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki startBudowa elementów GUI za pomocą biblioteki React - szybki start
Budowa elementów GUI za pomocą biblioteki React - szybki start
 
1. Introduction PM1
1. Introduction PM11. Introduction PM1
1. Introduction PM1
 
Нагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOpsНагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOps
 
Functors, Applicatives and Monads In Scala
Functors, Applicatives and Monads In ScalaFunctors, Applicatives and Monads In Scala
Functors, Applicatives and Monads In Scala
 
Requisitos Certificação de Entidades Formadoras
Requisitos Certificação de Entidades FormadorasRequisitos Certificação de Entidades Formadoras
Requisitos Certificação de Entidades Formadoras
 
Поиск багов при тестировании переходов с веба в мобильное приложение
Поиск багов при тестировании переходов с веба в мобильное приложениеПоиск багов при тестировании переходов с веба в мобильное приложение
Поиск багов при тестировании переходов с веба в мобильное приложение
 
Building Reactive Applications With Akka And Java
Building Reactive Applications With Akka And JavaBuilding Reactive Applications With Akka And Java
Building Reactive Applications With Akka And Java
 
UI Rendering at Wayfair
UI Rendering at WayfairUI Rendering at Wayfair
UI Rendering at Wayfair
 
Effectively Monitoring Client-Side Performance
Effectively Monitoring Client-Side PerformanceEffectively Monitoring Client-Side Performance
Effectively Monitoring Client-Side Performance
 
[devops REX 2016] Soyez réalistes, demandez l’impossible !
[devops REX 2016] Soyez réalistes, demandez l’impossible ![devops REX 2016] Soyez réalistes, demandez l’impossible !
[devops REX 2016] Soyez réalistes, demandez l’impossible !
 

Mais de 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
 
HTTPS bez wymówek
HTTPS bez wymówekHTTPS bez wymówek
HTTPS bez wymówek3camp
 
Jak udokumentować bazę danych
Jak udokumentować bazę danychJak udokumentować bazę danych
Jak udokumentować bazę danych3camp
 
ORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowaniaORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowania3camp
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 

Mais 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
 
HTTPS bez wymówek
HTTPS bez wymówekHTTPS bez wymówek
HTTPS bez wymówek
 
Jak udokumentować bazę danych
Jak udokumentować bazę danychJak udokumentować bazę danych
Jak udokumentować bazę danych
 
ORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowaniaORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowania
 
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.
 
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...
 
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
 
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
 
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?
 
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
 
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
 

YSlow

  • 1. Przyspieszanie działania serwisów WWW Michał Felski michal.felski@gforces.pl
  • 2. www.adobe.com Czas ładowania strony: 7,903s html: 849 ms (10,7 %) 1.5Mbps ADSL
  • 3. sklep.etpro.pl Czas ładowania strony: 5.583s html: 816 ms (14,6 %) 1.5Mbps ADSL
  • 4. www.gratka.pl Czas ładowania strony: 9,796s html: 915 ms (9,3 %) 1.5Mbps ADSL
  • 5. Jak najmniej żądań łączenie skryptów łączenie CSS mapy obrazkowe obrazy CSS sprites osadzone obrazy preload i post-load
  • 6. Jak najmniej żądań – mapy obrazkowe server-side <a href=quot;toolbar.phpquot;><img ismap=”ismap” src=quot;toolbar.gifquot; /></a> → http://toolbar.php?127,13 client-side <img usemap=quot;#map1quot; border=0 src=quot;toolbar.gifquot; /> <map name=quot;map1quot;> <area shape=quot;rectquot; coords=quot;0,0,31,31quot; href=quot;add.phpquot; title=quot;Add filequot;> … </map>
  • 7. Jak najmniej żądań – obrazy CSS sprites <span style=” width: 32px; height: 32px; background-image: url('sprites.gif'); background-position: -260px -90px;quot;> </span> Rozmiar jednego obrazka jest mniejszy niż kliku mniejszych
  • 8. Jak najmniej żądań – osadzone obrazy <IMG ALT=”star” SRC=quot;data:image/gif;base64,R0lGODlhDAAMALMLA PN8ffBiYvWWlvrKy/FvcPewsO9VVfajo+w6O/zl5est Lv/8/AAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAMAAw AAAQzcElZyryTEHyTUgknHd9xGV+qKsYirKkwDYiKDB iatt2H1KBLQRFIJAIKywRgmhwAIlEEADs=quot;> IE dopiero od IE 8 Firefox akceptuje do 100 KB
  • 9. Jak najmniej żądań Witryna internetowa JS CSS Obrazy Liczba żądań Rozmiar [KB] allegro.pl 6 1 19 36 111 fotka.pl 11 2 34 50 149 google.pl 1 0 2 5 22 interia.pl 9 1 128 142 437 nasza-klasa.pl 18 6 30 58 315 onet.pl 2 0 72 90 734 wikipedia.org 13 12 32 58 289 wp.pl 2 0 89 101 583 youtube.com 4 1 20 28 147 adobe.com 16 11 36 66 852 sklep.etpro.pl 2 3 16 22 158 gratka.pl 15 4 36 62 289
  • 10. Pamięć podręczna Witryna internetowa Liczba żądań Liczba żądań z pustym buforem z pełnym buforem allegro.pl 36 3 fotka.pl 50 16 google.pl 5 2 interia.pl 142 27 nasza-klasa.pl 58 13 onet.pl 90 13 wikipedia.org 58 3 wp.pl 101 18 youtube.com 28 12 adobe.com 66 16 sklep.etpro.pl 22 1 gratka.pl 62 13
  • 11. Pamięć podręczna Expires: Tue, 09 Mar 2010 19:15:02 GMT Cache-Control: max-age=31104000 Nazwy plików przy wykorzystaniu cache global.css?123608120 reklama.js?20090310 123603675_image.gif Konfiguracja nagłówka ETag ETag: quot;c8897e-aee-4165acf0quot; Last-Modified: Thu, 07 Oct 2004 20:54:08 GMT If-None-Match: quot;c8897e-aee-4165acf0quot; If-Modified-Since: Thu, 07 Oct 2004 20:54:08 GMT FileETag INode MTime Size FileETag none
  • 12. Optymalizacja skryptów i CSS Zewnętrzne skrypty CSS CSS jak najwyżej (sekcja HEAD) LINK zamiast @import unikać wyrażeń w CSS skrypty jak najniżej (przed </body>) minimalizacja skryptów i CSS unikać duplikowania skryptów body { width: expression(document.body.clientWidth < 600 ? “600px”:“auto” ); width-min: 600px; }
  • 13. Optymalizacja obrazów optymalna liczba kolorów # identify -verbose image.gif PNG zamiast GIF # convert image.gif image.png optymalizacja PNG # pngcrush image.png -rem alla -reduce -brute result.png optymalizacja JPG # jpegtran -copy none -optimize -perfect src.jpg dest.jpg nie skalować obrazów w html <img width=quot;100quot; height=quot;100quot; src=quot;image.jpgquot; alt=quot;quot; /> obiekty poniżej 25K
  • 14. Optymalizacja zapytań Rozpraszanie zapytań na kilka domen (yimg.com, ytimg.com, images-amazon.com) redukcja zapytań DNS (przeciętnie 20-120 ms na zapytanie, blokada równoległego pobierania obiektów) redukcja przekierowań buforowanie zapytań AJAX GET zamiast POST unikanie błędu 404 kompresja gzip
  • 15. Kompresja odpowiedzi (GZIP) Zmniejsza czas pobierania treści Wspierane przez ponad 90% przeglądarek Niezalecane dla obrazków i PDF Kompresja czy obsługa proxy? Buforowanie proxy: Żądanie HTTP Accept-Encoding: gzip, deflate Vary: Accept-Encoding Vary: Accept-Encoding, User-Agent Odpowiedź HTTP Vary: * Content-Encoding: gzip Cache-Control: private
  • 16. CDN – Content Delivery Network Akamai, Limelight, SAVVIS, Mirror Image ValueCDN, Hostway, Amazon CloudFront CoralCDN, CoDeeN Globule TP http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js
  • 18. YSlow - wyniki TOP 10 Polska TOP 10 Global Witryna internetowa Wynik Witryna internetowa Wynik C (71) blogger.com allegro.pl B (81) C (79) facebook.com fotka.pl F (57) A (96) google.com google.pl A (95) A (97) live.com interia.pl F (54) F (49) msn.com nasza-klasa.pl F (43) D (64) myspace.com onet.pl F (44) orkut.com A (98) wikipedia.org D (68) D (68) wikipedia.org wp.pl F (48) A (96) yahoo.com youtube.com D (67) D (67) youtube.com adobe.com F (29) sklep.etpro.pl B (88) gratka.pl F (41)