Jeszcze wydajniejsze witryny internetowe Przyspieszanie dzialania serwisow WWW jewywi


Jeszcze wydajniejsze witryny
internetowe. Przyspieszanie
działania serwisów WWW
Autor: Steve Souders
Tłumaczenie: Leszek Sagalara
ISBN: 978-83-246-2579-6
Tytuł oryginału: Even Faster Web Sites:
Performance Best Practices for Web Developers
Format: 168237, stron: 240
Poznaj najlepsze techniki zwiększania wydajnoSci aplikacji internetowych!
" Jak stosować technikę kodowania porcjami w celu szybszego kodowania stron?
" Jak pisać wydajny kod JavaScript?
" Jak rozdzielać zasoby na wiele domen?
WydajnoSć witryny stanowi jeden z podstawowych czynników jej sukcesu w sieci.
Jednak bogactwo treSci i popularnoSć technologii Ajax w dzisiejszych aplikacjach
internetowych wystawiają przeglądarki na ciężką próbę. W tej sytuacji potrzebujesz
profesjonalnych informacji i skutecznych metod zwiększających wydajnoSć Twojej
strony WWW. JeSli chcesz ją poprawić, powinieneS skorzystać z tej książki, ponieważ
znajdziesz tu mnóstwo wartoSciowych technik, które pomogą Ci zoptymalizować
działanie każdej aplikacji.
Książka  Jeszcze wydajniejsze witryny internetowe. Przyspieszanie działania serwisów
WWW zawiera najbardziej aktualne porady, dzięki którym Twoja witryna otrzyma
nowy zastrzyk energii. Z tego podręcznika dowiesz się, w jaki sposób Ajax wpływa na
interakcję przeglądarek i serwerów, oraz nauczysz się wykorzystywać tę relację w celu
identyfikacji elementów służących do poprawy wydajnoSci aplikacji. Poznasz metody
łączenia kodu osadzonego ze skryptami asynchronicznymi oraz kilka specyficznych
technik przyspieszania JavaScriptu. Dzięki tej książce będziesz wiedział, jak zaoszczędzić
cenne sekundy przez skrócenie czasu wczytywania, a także sprawisz, że Twoja witryna
będzie działać jeszcze szybciej.
" Tworzenie responsywnych aplikacji WWW
" Wczytywanie skryptów bez blokowania
" Łączenie skryptów asynchronicznych
" Pozycjonowanie skryptów osadzonych
" Pisanie wydajnego kodu JavaScript
" Skalowanie przy użyciu Comet
" Optymalizacja grafiki
" Rozdzielanie zasobów na wiele domen
" Upraszczanie selektorów CSS
SzybkoSć ma znaczenie  zwiększ wydajnoSć swojej strony WWW
Spis tre ci
Wspó autorzy ...........................................................................................................................9
Przedmowa ..............................................................................................................................11
Jak podzielona jest ksi ka? 11
Wydajno JavaScriptu 13
Wydajno sieci 14
Wydajno przegl darki 15
Konwencje zastosowane w ksi ce 15
U ywanie przyk adowych kodów 16
Podzi kowania 16
1. Wydajno technologii Ajax ........................................................................................ 19
Co za co 19
Zasady optymalizacji 20
Ajax 22
Przegl darka 22
Fajerwerki 23
JavaScript 24
Podsumowanie 24
2. Tworzenie responsywnych aplikacji WWW ...............................................................25
Co to znaczy  wystarczaj co szybko ? 27
Pomiar opó nienia 28
Gdy opó nienia s zbyt du e 30
W tkowanie 30
Zapewnienie responsywno ci 31
Web Workers 31
Gears 32
Timery 33
Wp yw zu ycia pami ci na czas odpowiedzi 34
Pami wirtualna 35
Rozwi zywanie problemów zwi zanych z pami ci 36
Podsumowanie 36
3
3. Rozdzielanie przesy anej zawarto ci .........................................................................39
Nie wszystko naraz 39
Oszcz dno ci z podzia u 40
Sposób podzia u 41
Niezdefiniowane symbole i sytuacje wy cigu 42
Studium przypadku: Google Calendar 43
4. Wczytywanie skryptów bez blokowania ...................................................................45
Blokowanie skryptów 45
Techniki pobierania skryptów 47
XHR Eval 47
XHR Injection 48
Skrypt w IFrame 49
Skrypt w elemencie DOM 50
Skrypt odroczony 50
Znacznik SCRIPT w instrukcji document.write 50
Wska niki zaj to ci przegl darki 51
Zapewnianie (lub unikanie) wykonywania w kolejno ci 53
Podsumowanie wyników 54
Zwyci zc zostaje& 55
5. czenie skryptów asynchronicznych ........................................................................59
Przyk ad kodu: menu.js 60
Sytuacja wy cigu 62
Asynchroniczne zachowanie kolejno ci 63
Technika 1.: Wywo anie zwrotne ustalone 64
Technika 2.: Window Onload 65
Technika 3.: Timer 66
Technika 4.: Script Onload 66
Technika 5.: Degraduj ce znaczniki skryptu 67
Wiele skryptów zewn trznych 69
Zarz dzany kod XHR 70
Techniki skryptu w elemencie DOM i skryptu w instrukcji document.write 73
Ogólne rozwi zanie 76
Pojedynczy skrypt 76
Wiele skryptów 77
Asynchroniczno w praktyce 79
Google Analytics i Dojo 79
YUI Loader Utility 81
6. Pozycjonowanie skryptów osadzonych .....................................................................85
Blokuj ce dzia anie skryptów osadzonych 85
Przeniesienie skryptów osadzonych na koniec dokumentu 86
Asynchroniczne inicjowanie wykonywania skryptów 87
U ycie SCRIPT DEFER 88
Zachowywanie kolejno ci wczytywania CSS i kodu JavaScript 89
4 Spis tre ci
Niebezpiecze stwo: arkusz stylów przed skryptem osadzonym 90
Skrypty osadzone nie s blokowane przez wi kszo pobiera 90
Skrypty osadzone s blokowane przez arkusze stylów 91
Takie rzeczy si zdarzaj 92
7. Pisanie wydajnego kodu JavaScript ............................................................................95
Zarz dzanie zasi giem 95
Stosowanie zmiennych lokalnych 97
Powi kszanie a cucha zasi gu 98
Wydajny dost p do danych 100
Sterowanie przep ywem 103
Szybkie warunkowanie 103
Szybkie p tle 107
Optymalizacja a cuchów znakowych 112
Konkatenacja a cuchów 112
Przycinanie a cuchów 114
Unikaj skryptów o d ugim czasie dzia ania 115
Wprowadzanie przerw przy u yciu timerów 116
Wzorce timerów do wprowadzania przerw 118
Podsumowanie 120
8. Skalowanie przy u yciu Comet ................................................................................. 123
Jak dzia a Comet? 123
Techniki transportowe 125
Odpytywanie 125
Wyd u one odpytywanie 125
Wieczna ramka 127
Strumieniowanie XHR 128
Techniki transportowe przysz o ci 130
Rozwi zania mi dzydomenowe 130
Efekty wdro enia w aplikacjach 131
Zarz dzanie po czeniami 131
Pomiar wydajno ci 132
Protoko y 132
Podsumowanie 133
9. Nie tylko gzip ............................................................................................................. 135
Dlaczego to ma znaczenie? 135
Co jest tego powodem? 137
Szybki przegl d 137
Winowajca 137
Przyk ady popularnych ó wich pods uchiwaczy 138
Jak pomóc tym u ytkownikom? 138
Projektowanie pod k tem zminimalizowania
rozmiarów nieskompresowanych danych 139
Edukowanie u ytkowników 143
Bezpo rednie wykrywanie obs ugi gzip 144
Spis tre ci 5
10. Optymalizacja grafiki ................................................................................................ 147
Dwa etapy upraszczaj ce optymalizacj grafiki 148
Formaty plików graficznych 149
Informacje wst pne 149
Charakterystyka ró nych formatów graficznych 151
Wi cej o PNG 153
Automatyczna bezstratna optymalizacja grafiki 155
Optymalizacja plików PNG 155
Usuwanie metadanych JPEG 156
Konwersja plików GIF do formatu PNG 157
Optymalizacja animacji GIF 158
Smush.it 158
Progresywna wersja formatu JPEG dla du ych grafik 158
Przezroczysto stopniowana  unikaj AlphaImageLoader 159
Efekty przezroczysto ci stopniowanej 159
AlphaImageLoader 161
Problemy zwi zane z filtrem AlphaImageLoader 162
Progresywne rozszerzenie PNG8 o przezroczysto stopniowan 164
Optymalizacja 165
Podej cie ca o ciowe kontra podej cie modu owe 166
Wysoce zoptymalizowane obrazy CSS Sprite 167
Inne optymalizacje grafiki 167
Unikaj skalowania grafiki 168
Optymalizuj grafiki generowane 168
Ikony favicon 169
Ikona Apple touch 170
Podsumowanie 171
11. Rozdzielanie zasobów na wiele domen ....................................................................173
cie ka krytyczna 173
Kto rozdziela zasoby? 175
Przej cie na HTTP/1.0 177
Rozdzielanie zasobów 179
Adres IP czy nazwa hosta? 179
Ile domen? 180
Jak podzieli zasoby? 180
Nowsze przegl darki 180
12. Wcze niejsze wysy anie dokumentu .........................................................................181
Funkcja flush 181
Buforowanie danych wyj ciowych 183
Kodowanie porcjami 185
Funkcja flush i kompresja gzip 186
Inne oprogramowanie po rednicz ce 186
Blokowanie domen przy u ywaniu funkcji flush 187
Przegl darki  ostatnia przeszkoda 188
Funkcja flush poza PHP 188
Lista kontrolna 189
6 Spis tre ci
13. Oszcz dne wykorzystanie elementów IFrame .........................................................191
Najbardziej kosztowny element DOM 191
Elementy IFrame blokuj zdarzenie onload 192
Równoleg e pobierania z elementami IFrame 194
Skrypt przed elementem IFrame 194
Arkusz stylów przed elementem IFrame 195
Arkusz stylów za elementem IFrame 196
Liczba po cze na serwer 197
Wspó dzielenie po cze w elementach IFrame 197
Wspó dzielenie po cze w kartach i oknach 198
Podsumowanie kosztu elementów IFrame 200
14. Upraszczanie selektorów CSS ................................................................................... 201
Rodzaje selektorów 201
Selektory identyfikatora 202
Selektory klas 202
Selektory typu 203
Selektory braci 203
Selektory dziecka 203
Selektory potomka 203
Selektory uniwersalne 203
Selektory atrybutu 204
Pseudoklasy i pseudoelementy 204
Klucz do tworzenia wydajnych selektorów CSS 204
Od prawej do lewej 204
Pisanie wydajnych selektorów CSS 205
Wydajno selektorów CSS 206
Wp yw z o onych selektorów na wydajno (czasami) 206
Selektory CSS, których nale y unika 209
Czas dopasowywania 211
Pomiar selektorów CSS w praktyce 211
Dodatek A Narz dzia do analizy i poprawy wydajno ci .................................................... 213
Narz dzia nas uchuj ce 214
HttpWatch 214
Panel Sie dodatku Firebug 215
AOL Pagetest 215
VRTA 216
IBM Page Detailer 216
Panel Resources narz dzia Web Inspector 216
Fiddler 216
Charles 217
Wireshark 217
Narz dzia do analizy stron WWW 217
Firebug 217
Web Inspector 218
IE Developer Toolbar 219
Spis tre ci 7
Narz dzia do analizy wydajno ci 219
YSlow 220
AOL Pagetest 221
VRTA 223
neXpert 223
Ró ne 224
Hammerhead 224
Smush.it 225
Cuzillion 226
UA Profiler 227
Skorowidz .............................................................................................................................229
8 Spis tre ci
ROZDZIA 2.
Tworzenie responsywnych
aplikacji WWW
Ben Galbraith i Dion Almaer
Technologia Ajax spowodowa a, e wydajno witryn internetowych przesta a by traktowana
tylko w kategoriach szybkiego wczytywania stron. Coraz wi cej witryn korzysta z JavaScriptu,
aby po wczytaniu strony zmieni jej zawarto i wprowadzi w locie now tre . Tego rodzaju
witryny przypominaj tradycyjne programy komputerowe, a optymalizacja ich wydajno ci
wymaga u ycia innego zestawu technik ni w przypadku tradycyjnych witryn internetowych.
Interfejsy u ytkownika aplikacji WWW i tradycyjnych programów komputerowych maj
wspólny cel: odpowiedzie na dzia anie u ytkownika tak szybko, jak to mo liwe. W przy-
padku odpowiedzi na danie wczytania strony WWW wi kszo pracy zwi zanej z respon-
sywno ci przejmuje sama przegl darka. Otwiera ona po czenie internetowe z wybran wi-
tryn , analizuje kod HTML, wysy a dania wczytania powi zanych zasobów itd. W oparciu
o starann analiz tego procesu mo emy tak zoptymalizowa nasze strony, aby by y szybciej
wy wietlane, ale ostatecznie to przegl darka sprawuje kontrol nad ich wczytywaniem i wy-
wietlaniem.
W przypadku dzia ania u ytkownika dotycz cego samej witryny (gdy nie powoduje ono
za adowania nowej strony przez przegl dark ) mamy nad tym kontrol . Musimy zapewni
responsywno kodu JavaScript wykonywanego w wyniku tego dzia ania. Aby lepiej zrozu-
mie , w jakim stopniu mo emy kontrolowa responsywno , niezb dne b dzie wyja nienie
sposobu dzia ania interfejsu u ytkownika w przegl darce.
Jak wida na rysunku 2.1, gdy u ytkownik pracuje z przegl dark , system operacyjny otrzymuje
sygna y wej ciowe z ró nych urz dze pod czonych do komputera, takich jak klawiatura
lub mysz. System rozdziela te sygna y na aplikacje, do których powinny one trafi , pakietuje
je jako pojedyncze zdarzenia i umieszcza w kolejce dla danej aplikacji, zwanej kolejk zdarze .
Przegl darka internetowa, podobnie jak ka da inna aplikacja GUI, przetwarza nast pnie po-
szczególne zdarzenia umieszczone w swojej kolejce i na ich podstawie wykonuje na ogó jed-
n z dwóch rzeczy: sama obs uguje dane zdarzenie (np. przez wy wietlenie menu, przegl -
danie WWW, wy wietlenie okna preferencji itp.) lub wykonuje kod JavaScript znajduj cy si
na stronie (np. kod JavaScript zawieraj cy procedur obs ugi zdarzenia onclick), co przed-
stawia rysunek 2.2.
25
Rysunek 2.1. System operacyjny kieruje wszystkie sygna y wej ciowe u ytkownika do kolejki zdarze
Rysunek 2.2. Przegl darka u ywa pojedynczego w tku do przetworzenia zdarze z kolejki i wykonania
kodu u ytkownika
Warto w tym miejscu wspomnie , e jest to proces w zasadzie jednow tkowy, tzn. przegl -
darka u ywa jednego w tku, aby pobra zdarzenie z kolejki, i albo robi co sama ( Przegl -
danie WWW na rysunku 2.2), albo wykonuje kod JavaScript. Wskutek tego przegl darka
mo e wykona tylko jedno z tych zada naraz, a ka de z nich mo e zapobiec wyst pieniu
innego zdarzenia.
26 Rozdzia 2. Tworzenie responsywnych aplikacji WWW
Ka da chwila sp dzona przez przegl dark na wykonywaniu kodu JavaScript to okres, w ci gu
którego nie mo e ona odpowiada na inne zdarzenia u ytkownika. Dlatego te niezwykle
istotne jest, aby kod JavaScript umieszczony na stronie by wykonywany jak najszybciej. W prze-
ciwnym razie strona WWW i sama przegl darka mog reagowa z opó nieniem lub ca kiem
zaprzesta dzia ania.
Trzeba tu zaznaczy , e ca y ten wyk ad o dzia aniu przegl darki i systemu operacyjnego pod
wzgl dem obs ugi sygna ów wej ciowych i zdarze jest tylko uogólnieniem obejmuj cym
szeroki zakres przypadków, które w szczegó ach mog si ró ni . Jednak niezale nie od ró nic
wszystkie przegl darki wykonuj ca y kod JavaScript w jednym w tku (chyba e u yjemy
Web Workers, co zostanie omówione w dalszej cz ci tego rozdzia u), co sprawia, e z po-
wodzeniem mo na zastosowa techniki zalecane w tym rozdziale.
Co to znaczy  wystarczaj co szybko ?
atwo powiedzie , e kod powinien by wykonywany  tak szybko, jak to mo liwe , ale cza-
sami trzeba przeprowadzi operacje, które zajmuj troch czasu. Algorytmy szyfruj ce, z o one
generowanie grafiki i operacje na obrazach  to przyk ady oblicze , które s czasoch onne
niezale nie od tego, ile wysi ku w o ymy w to, aby by y one  tak szybkie, jak to mo liwe .
Jednak e, o czym wspomnia Douglas w rozdziale 1., programi ci szukaj cy sposobu na two-
rzenie responsywnych, wysoko wydajnych witryn internetowych nie mog  i nie powinni
 d y do tego celu przez optymalizowanie ka dego napisanego przez siebie fragmentu
kodu. Prawda wygl da inaczej: nale y optymalizowa tylko to, co nie dzia a wystarczaj co
szybko.
Dlatego te istotne jest zdefiniowanie, co jest  wystarczaj co szybkie w tym kontek cie. Na
szcz cie kto ju to za nas zrobi .
Jacob Nielsen, znany i powa any ekspert w dziedzinie u yteczno ci aplikacji WWW, w po-
ni szym cytacie1 kwesti  wystarczaj cej szybko ci przedstawia nast puj co:
Wytyczne dotycz ce czasu reakcji dla aplikacji WWW s takie same jak dla wszystkich innych
aplikacji. Pozostaj one niezmienne ju od 37 lat i najprawdopodobniej nie zmieni si bez
wzgl du na to, jaka technologia zostanie zaimplementowana w przysz o ci.
0,1 sekundy: Ograniczenie pozwalaj ce u ytkownikom odnie wra enie, e bezpo rednio
operuj obiektami w graficznym interfejsie u ytkownika. Dla przyk adu jest to czas od zazna-
czenia przez u ytkownika kolumny w tabeli do pod wietlenia kolumny lub zasygnalizowania
w inny sposób, e zosta a ona wybrana. By oby idealnie, gdyby by to równie czas reakcji na
sortowanie kolumny  w takim przypadku u ytkownik mia by uczucie bezpo redniego sor-
towania tabeli.
1 sekunda: Ograniczenie pozwalaj ce u ytkownikom odnie wra enie swobodnej nawigacji
w przestrzeni polece bez konieczno ci nadmiernego oczekiwania na odpowied komputera.
Opó nienie od 0,2 do 1 sekundy oznacza, e u ytkownicy je zauwa i b d mie wra enie, e
komputer  pracuje nad poleceniem, w przeciwie stwie do sytuacji, gdy wykonanie polecenia
jest bezpo rednim efektem dzia ania u ytkownika. Przyk ad: je li nie mo na posortowa tabeli
zgodnie z wybran kolumn w czasie krótszym ni 0,1 sekundy, trzeba to zrobi w ci gu 1 se-
kundy, w przeciwnym razie u ytkownicy odnios wra enie, e interfejs dzia a oci ale, i strac
1
http://www.useit.com/papers/responsetime.html
Co to znaczy  wystarczaj co szybko ? 27
poczucie p ynno ci w wykonywaniu swojej pracy. W przypadku opó nie wi kszych ni 1 se-
kunda nale y zasygnalizowa u ytkownikowi, e komputer pracuje nad problemem, np. przez
zmian kszta tu kursora.
10 sekund: Ograniczenie dla u ytkowników skupiaj cych sw uwag na zadaniu. Wszystko, co
trwa d u ej ni 10 sekund, wymaga procentowego wska nika, a tak e wyra nie wskazanego
sposobu przerwania operacji. Trzeba za o y , e wracaj c do interfejsu po opó nieniu d u -
szym ni 10 sekund, u ytkownicy strac p ynno wykonywania zada i b d musieli si
 przestawi  . Opó nienia d u sze ni 10 sekund s dopuszczalne tylko podczas naturalnych
przerw w pracy u ytkownika, np. przy prze czaniu zada .
Innymi s owy, je li wykonywanie Twojego kodu JavaScript trwa d u ej ni 0,1 sekundy,
Twoja strona nie wywo a wra enia p ynno ci i szybko ci; je li zajmie to d u ej ni 1 sekund ,
aplikacja b dzie si wydawa oci a a; przy opó nieniu przekraczaj cym 10 sekund u yt-
kownik b dzie ju niezmiernie poirytowany. Takie s ostateczne wskazówki, je li chodzi o defini-
cj  wystarczaj cej szybko ci .
Pomiar opó nienia
Skoro znasz ju progi opó nie , nast pnym etapem b dzie poznanie sposobów pomiaru
szybko ci wykonywania kodu JavaScript, co pozwoli okre li , czy nie przekracza ona wspo-
mnianych wcze niej zakresów (sam musisz okre li , jak szybko ma dzia a Twoja strona; na-
szym celem jest utrzymanie wszystkich opó nie interfejsu poni ej granicy 0,1 sekundy).
Naj atwiejszym, najprostszym i prawdopodobnie najmniej precyzyjnym sposobem pomiaru
opó nienia jest obserwacja przez cz owieka; po prostu u yj aplikacji na swojej docelowej
platformie i sprawd , czy ma wystarczaj c wydajno . W ko cu zapewnienie odpowiedniej
wydajno ci interfejsu ma s u y cz owiekowi, wi c jest to w a ciwy sposób przeprowadzenia
takich pomiarów (oczywi cie tylko nieliczni b d w stanie poda czas opó nienia w sekundach
lub u amkach sekund; wi kszo pos u y si bardziej ogólnymi okre leniami, np.  szybki ,
 powolny ,  zadowalaj cy itp.).
Je li jednak pragniesz uzyska bardziej precyzyjne wyniki, masz dwie mo liwo ci: r czne
(logowanie) lub zautomatyzowane (profilowanie) oprzyrz dowanie kodu.
R czne oprzyrz dowanie kodu jest naprawd proste. Powiedzmy, e mamy na stronie funk-
cj obs ugi zdarzenia, np.:
...

Prostym sposobem dodania oprzyrz dowania r cznego b dzie zlokalizowanie definicji funkcji
myJavaScriptFunction() i dodanie do niej pomiaru czasu:
function myJavaScriptFunction() {
var start = new Date().getMilliseconds();
// tutaj jaki skomplikowany kod
var stop = new Date().getMilliseconds();
var executionTime = stop - start;
alert("Wykonywanie funkcji myJavaScriptFunction() trwa o " + executionTime + "
millisekund");
}
Powy szy kod spowoduje otwarcie okna wy wietlaj cego czas wykonywania; milisekunda to
1
/1000 sekundy, wi c 100 milisekund odpowiada wspomnianemu wcze niej progowi 0,1
sekundy.
28 Rozdzia 2. Tworzenie responsywnych aplikacji WWW
Wiele przegl darek jest wyposa onych we wbudowan konsol zapewniaj c funk-
cj log() (Firefox udost pnia j w popularnym dodatku Firebug); osobi cie bardziej
wolimy console.log() ni alert().
Istniej narz dzia przeprowadzaj ce automatyczny pomiar czasu wykonywania kodu, ale zazwy-
czaj stosuje si je do innych celów. Zamiast do pomiaru dok adnego czasu wykonywania
funkcji narz dzia takie  zwane profilerami  s zwykle u ywane do okre lenia wzgl dnej
ilo ci czasu, jaki zajmuje wykonanie zestawu funkcji; inaczej mówi c, s u one do wy-
krywania  w skich garde  lub wolniej wykonywanych fragmentów kodu.
Firebug (http://getfirebug.com/), popularny dodatek do przegl darki Firefox, zawiera profiler kodu
JavaScript generuj cy komunikaty wyj ciowe podobne do przedstawionych na rysunku 2.3.
Rysunek 2.3. Profiler w dodatku Firebug
Kolumna Czas przedstawia czas, jaki interpreter JavaScriptu po wi ci ogó em na wykonanie
danej funkcji w okresie profilowania. Cz sto zdarza si , e jaka funkcja wywo uje inne funk-
cje; kolumna W asny czas przedstawia ilo czasu po wi conego na wykonywanie tylko okre-
lonej funkcji, bez innych funkcji, które mog y by wywo ywane.
Mo na by s dzi , e ta i inne kolumny podaj ce czas przedstawiaj precyzyjny pomiar czasu
wykonywania funkcji. Okazuje si jednak, e profilery wywo uj co zbli onego do efektu
obserwatora w fizyce: czynno obserwacji dzia ania kodu wp ywa na dzia anie kodu.
Profilery mog stosowa jedn z dwóch strategii: albo b d ingerowa w kod b d cy przed-
miotem pomiarów przez dodanie specjalnego kodu zbieraj cego statystyki wydajno ci (chodzi
o proste zautomatyzowanie tworzenia kodu przedstawionego na poprzednim listingu), albo
pasywnie monitorowa czas uruchamiania, sprawdzaj c, jaki fragment kodu wykonywany
jest w danym momencie. Ostatnie z tych dwóch podej w mniejszym stopniu wp ywa na
wykonywanie profilowanego kodu, jednak odbywa si to kosztem zebrania danych o ni szej
jako ci.
Pomiar opó nienia 29
W dodatku Firebug wyniki ulegaj dalszym zniekszta ceniom, poniewa jego profiler wywo uje
w asny proces wewn trz procesu Firebuga, co obni a wydajno kodu b d cego przedmiotem
pomiarów.
Kolumna Procent w oknie dodatku Firebug pokazuje wzgl dny czas wykonania: na interfejsie
swojej strony mo esz przeprowadzi jakie wysokopoziomowe zadanie (np. klikn przycisk
Wy lij), a nast pnie za pomoc profilera dodatku Firebug sprawdzi , które funkcje zabieraj
najwi cej czasu, i skupi swoje wysi ki na ich optymalizacji.
Gdy opó nienia s zbyt du e
Okazuje si , e gdy Twój kod JavaScript zatrzymuje w tek przegl darki na szczególnie d ugi
czas, wi kszo przegl darek zainterweniuje i pozwoli u ytkownikowi przerwa wykonywa-
nie kodu. Nie ma adnego standardu mówi cego o tym, w jaki sposób przegl darki maj okre-
la , czy da u ytkownikowi tak mo liwo (szczegó owe informacje dotycz ce zachowania po-
szczególnych przegl darek znajduj si na stronie http://www.nczonline.net/blog/2009/01/05/
what-determines-that-a-script-is-long-running/).
Wniosek jest prosty: nie wprowadzaj na swoj stron WWW le napisanego kodu, którego
wykonywanie mo e trwa potencjalnie bardzo d ugo.
W tkowanie
Po zidentyfikowaniu kodu, który zachowuje si nieodpowiednio, nast pnym etapem b dzie
jego optymalizacja. Czasem jednak zadanie wykonywane przez taki kod mo e wi za si
z du ym kosztem i nie da si go w magiczny sposób zoptymalizowa w celu jego przyspie-
szenia. Czy taki scenariusz musi si wi za ze spowolnieniem dzia ania interfejsu? Czy nie
ma adnego sposobu, aby zadowoli naszych u ytkowników?
Tradycyjnym rozwi zaniem w takich przypadkach jest skorzystanie z w tków, aby odci y
w tek u ywany do interakcji z u ytkownikiem od wykonywania kodu powoduj cego du y
koszt. W naszym scenariuszu umo liwi to przegl darce kontynuowanie przetwarzania zda-
rze z kolejki i zachowanie responsywno ci interfejsu, podczas gdy d ugo dzia aj cy kod b dzie
wykonywany w innym w tku (a system operacyjny zatroszczy si o to, aby zarówno w tek
interfejsu u ytkownika przegl darki, jak i w tek wykonywany w tle sprawiedliwie korzy-
sta y z zasobów komputera).
JavaScript nie zawiera jednak obs ugi w tków, dlatego w przypadku kodu JavaScript nie ma
mo liwo ci utworzenia w tku wykonuj cego w tle kod o du ym koszcie. Co wi cej, nie wy-
gl da na to, aby ta sytuacja mia a ulec zmianie.
Brendan Eich, twórca JavaScriptu i dyrektor techniczny fundacji Mozilla, wyrazi si do jasno
w tej kwestii2:
eby pracowa z systemami w tkowania, musisz by [wielki jak gracz NBA], a to oznacza, e
wi kszo programistów powinna uciec z p aczem. Ale tak nie zrobi . Zamiast tego, podobnie
jak to jest w przypadku wi kszo ci innych ostrych narz dzi, b dzie ich kusi , eby pokaza , jacy
2
http://weblogs.mozillazine.org/roadmap/archives/2007/02/threads_suck.html
30 Rozdzia 2. Tworzenie responsywnych aplikacji WWW
s wielcy. Wezm najbli szy jednow tkowy kod i wepchn go w rodowisko wielow tkowe
lub w inny sposób doprowadz do sytuacji wy cigu. Sporadycznie efekty b d tragiczne, ale zbyt
cz sto sko czy si to tak, e mimo pokaleczenia sobie palców nikt nie wyniesie z tego nauki.
W tki wprowadzaj ca y szereg zak óce , g ównie przez tworzenie sytuacji wy cigu, ryzyko
zakleszczenia i pesymistyczn blokad obci enia. I wci nie s na tyle skalowalne, aby mog y
w przysz o ci obs u y te wszystkie megardzenie i teraflopy.
Dlatego moja standardowa odpowied na takie pytania, jak:  Kiedy dodasz w tki do Java-
Scriptu? , brzmi:  Po twoim trupie! .
Bior c pod uwag wp yw Brendana na bran i na przysz o JavaScriptu (który jest znaczny)
oraz fakt, e wiele osób w du ym stopniu podziela jego pogl dy, mo na bezpiecznie przyj ,
e w JavaScripcie niepr dko pojawi si w tki.
Istniej jednak inne rozwi zania. Podstawowy problem z w tkami polega na tym, e ró ne
w tki mog mie dost p do tych samych zmiennych i mog je modyfikowa . To powoduje
ca y szereg problemów, np. gdy w tek A modyfikuje zmienne, które s aktywnie modyfiko-
wane przez w tek B itp. Mo na by s dzi , e przyzwoity programista poradzi sobie z tego
rodzaju kwestiami, ale jak si okazuje, Brendan twierdzi, e nawet najlepsi z nas pope niaj
okropne pomy ki w tej dziedzinie.
Zapewnienie responsywno ci
To, czego potrzebujemy, to odnoszenie korzy ci z w tków  równoleg ego wykonywania
zada  bez ryzyka, e b d one sobie nawzajem wchodzi w parad . Firma Google w swoim
popularnym dodatku do przegl darek o nazwie Gears zaimplementowa a w a nie takie API:
WorkerPool. W zasadzie umo liwia ono g ównemu w tkowi JavaScript przegl darki two-
rzenie dzia aj cych w tle w tków roboczych (ang. workers), które rozpoczynaj c prac , otrzy-
muj pewne proste komunikaty (np. stan autonomiczny, bez odniesie do wspólnych zmien-
nych) z w tku przegl darki i zwracaj komunikat po jej zako czeniu.
Do wiadczenia z dzia ania tego API w dodatku Gears sprawi y, e w wielu przegl darkach
(np. Safari 4, Firefox 3.13) wprowadzono bezpo redni obs ug w tków roboczych w oparciu
o wspólne API zdefiniowane w specyfikacji HTML 5. Opcja ta jest znana pod nazw Web
Workers.
Web Workers
Rozwa my, w jaki sposób wykorzysta API Web Workers do odszyfrowania warto ci. Poni szy
listing przedstawia sposób tworzenia i zainicjowania w tku roboczego:
// utworzenie i rozpocz cie wykonywania w tku roboczego
var worker = new Worker("js/decrypt.js");
// zarejestrowanie procedury obs ugi zdarzenia, która zostanie wykonana,
// gdy w tek roboczy wy le komunikat do w tku g ównego
worker.onmessage = function(e) {
alert("Odszyfrowana warto to " + e.data);
}
// wys anie komunikatu do w tku roboczego, w tym przypadku b dzie to warto do odszyfrowania
worker.postMessage(getValueToDecrypt());
3
Przegl darka Firefox nosi a numer 3.1 w wersji beta, ostatecznie jednak zosta a wydana jako Firefox 3.5 
przyp. t um.
Zapewnienie responsywno ci 31
Przyjrzyjmy si teraz hipotetycznej zawarto ci skryptu js/decrypt.js:
// zarejestrowanie funkcji obs ugi komunikatów przekazywanych przez w tek g ówny
onmessage = function(e) {
// pobranie otrzymanych danych
var valueToDecrypt = e.data;
// Do zrobienia: zaimplementowa w tym miejscu funkcj deszyfruj c
// zwrócenie warto ci do w tku g ównego
postMessage(decryptedValue);
}
Wszystkie potencjalnie kosztowne (tj. o d ugim czasie dzia ania) operacje JavaScriptu wyko-
nywane przez Twoj stron powinny by przekazywane do w tków roboczych. Dzi ki temu
Twoja aplikacja b dzie dzia a z pe n szybko ci .
Gears
Je li znajdziesz si w sytuacji, e Twoja aplikacja ma dzia a w przegl darce, która nie obs uguje
API Web Workers, istnieje kilka innych rozwi za . W poprzednim rozdziale wspomnieli my
o dodatku Gears firmy Google; dzi ki niemu mo na uzyska co bardzo podobnego do Web
Workers w przegl darce Internet Explorer, w starszych wersjach Firefoksa i starszych wer-
sjach Safari.
API w tków roboczych w Gears jest podobne do API Web Workers, cho nie identyczne. Poni ej
przedstawione zosta y dwa poprzednie listingi z kodem skonwertowanym na API Gears, po-
cz wszy od kodu wykonywanego w g ównym w tku w celu zainicjowania w tku roboczego:
// utworzenie puli w tków, która zainicjuje w tki robocze
var workerPool = google.gears.factory.create('beta.workerpool');
// zarejestrowanie funkcji obs ugi zdarze , która b dzie odbiera komunikaty z w tków roboczych
workerPool.onmessage = function(ignore1, ignore2, e) {
alert("Odszyfrowana warto to + " e.body);
}
// utworzenie w tku roboczego
var workerId = workerPool.createWorkerFromUrl("js/decrypt.js");
// wys anie komunikatu do w tku roboczego
workerPool.sendMessage(getValueToDecrypt(), workerId);
A tak wygl da zawarto skryptu js/decrypt.js w wersji Gears:
var workerPool = google.gears.workerPool;
workerPool.onmessage = function(ignore1, ignore2, e) {
// pobranie przys anych danych
var valueToDecrypt = e.body;
// Do zrobienia: zaimplementowa w tym miejscu funkcj deszyfruj c
// zwrócenie warto ci do w tku g ównego
workerPool.sendMessage(decryptedValue, e.sender);
}
32 Rozdzia 2. Tworzenie responsywnych aplikacji WWW
Wi cej na temat Gears
Warto pozna kilka faktów z historii powstania w tków roboczych Gears, poniewa zosta y
one wymy lone z bardzo praktycznych wzgl dów. Dodatek Gears zosta utworzony przez
zespó Google, który stara si zmusi przegl dark do wykonywania zada , jakich nie by a
wtedy w stanie wykona (dzia o si to przed powstaniem Google Chrome  ale nawet
maj c Chrome, Google chce, aby mo liwie jak najwi ksza liczba u ytkowników mog a wy-
konywa z o one zadania za pomoc ich aplikacji WWW).
Wyobra sobie, e chcia by zbudowa Gmail Offline  czego by potrzebowa ? Po pierw-
sze, musia by znale sposób na lokalne buforowanie dokumentów i ich przechwytywanie,
aby  gdy przegl darka spróbuje uzyska dost p do strony http://mail.google.com/  wy-
wietli a si dana strona, a nie komunikat o braku po czenia. Po drugie, wymaga oby to
jakiej metody przechowywania wiadomo ci e-mail, zarówno tych nowych, jak i starych.
Mo na by to zrobi na wiele sposobów, ale skoro dobrze znany SQLite jest obecny w wi k-
szo ci nowych przegl darek i do czany do wielu systemów operacyjnych, dlaczego tego
nie wykorzysta ? Tutaj w a nie tkwi problem.
Omawiali my kwestie zwi zane z jednow tkow przegl dark . Wyobra sobie teraz takie
operacje, jak zapisywanie nowych wiadomo ci e-mail do bazy danych lub wykonywanie
d ugich zapyta . Mo emy zablokowa interfejs u ytkownika w czasie, gdy baza danych
wykonuje swoj prac  opó nienia mog by ogromne! Zespó pracuj cy nad Gears
musia sobie jako z tym poradzi . Dodatek Gears mo e robi , co chce, wi c z atwo ci
mo na by o obej brak w tków w JavaScripcie. Skoro jednak wspó bie no stanowi ogól-
ny problem, czemu nie udost pni tej mo liwo ci na zewn trz? Tak powsta o API Worker-
Pool, które doprowadzi o do powstania Web Workers w standardzie HTML 5.
Te dwa API ró ni si nieznacznie, ale wynika to st d, e Web Workers jest czym w rodzaju
wersji 2.0 pionierskiego API Gears; niebawem Gears powinien zosta wyposa ony w obs u-
g standardowego API. Powsta y ju biblioteki po rednicz ce, b d ce czym w rodzaju
pomostu mi dzy istniej cym API Gears a standardowym API Web Workers, których mo na
u ywa nawet bez Gears lub Web Workers (stosuj c setTimeout(), co zostanie omówione
w dalszej cz ci tego rozdzia u).
Timery
Inne podej cie, popularne przed powstaniem Gears i Web Workers, polega o na podzieleniu
d ugotrwa ych operacji na mniejsze cz ci i kontrolowaniu ich dzia ania przy u yciu timerów
JavaScriptu. Np.:
var functionState = {};
function expensiveOperation() {
var startTime = new Date().getMilliseconds();
while ((new Date().getMilliseconds() - startTime) < 100) {
// Do zrobienia: zaimplementowa d ugotrwa operacj w taki sposób,
// aby ca a praca by a wykonywana w mniejszych fragmentach,
// trwaj cych krócej ni 100 ms, z przekazywaniem stanu do "functionState"
// poza t funkcj ; powodzenia ;-)
}
if (!functionState.isFinished) {
// ponownie wprowadzi d ugotrwa operacj 10 ms po wyj ciu;
// warto poeksperymentowa z wi kszymi warto ciami, aby zachowa
// w a ciwe proporcje mi dzy responsywno ci a wydajno ci
Zapewnienie responsywno ci 33
setTimeout(expensiveOperation(), 10);
}
}
Dziel c operacj w przedstawiony sposób, zachowamy responsywno interfejsu, ale  jak
wskazuje komentarz w listingu  skonstruowanie takiej operacji mo e by trudne (a nawet
niewykonalne). Wi cej informacji na temat takiego u ycia metody setTimeout() zawiera
punkt  Wprowadzanie przerw przy u yciu timerów na stronie 116.
Z podej ciem tym wi e si inna podstawowa kwestia. Wi kszo nowoczesnych kompute-
rów wyposa ona jest w procesory o kilku rdzeniach, co oznacza, e mog pracowa napraw-
d wielow tkowo (podczas gdy wcze niejsze procesory jedynie emulowa y wielow tkowo
przez szybkie prze czanie si mi dzy zadaniami). R czne prze czanie zada zaimplemen-
towane za pomoc Javascriptu, jakie mia o miejsce w przedstawionym listingu, nie mo e
wykorzystywa takich architektur; a wi c nie u yjemy ca ej mocy procesora, zmuszaj c jeden
z rdzeni do wykonania ca ej pracy.
A zatem mo liwe jest przeprowadzanie d ugotrwa ych operacji w g ównym w tku przegl -
darki i zachowanie responsywno ci interfejsu, ale atwiejsze i wydajniejsze b dzie u ycie
w tków roboczych.
XMLHttpRequest
Ca a ta dyskusja na temat w tkowania nie by aby kompletna, gdyby my nie wspomnieli
o XMLHttpRequest (w skrócie XHR), który umo liwi rewolucj , jak by Ajax. U ywaj c
XHR, strona WWW mo e wys a komunikat i otrzyma odpowied w ca o ci w rodowisku
JavaScript, co pozwala uzyska z o on interaktywno bez konieczno ci wczytywania
nowych stron.
XHR ma dwa proste tryby dzia ania: synchroniczny i asynchroniczny. W trybie asynchro-
nicznym XHR jest w zasadzie w tkiem Web Worker, tyle e posiada wyspecjalizowane API;
w istocie w po czeniu z innymi funkcjami powstaj cej specyfikacji HTML 5 mo na odtwo-
rzy dzia anie XHR za pomoc w tków roboczych. W trybie synchronicznym XHR dzia a w taki
sposób, e ca sw prac wykonuje w g ównym w tku przegl darki, co sprawia, e opó -
nienia w interfejsie u ytkownika trwaj tyle czasu, ile potrzeba XHR na wys anie jego da-
nia i przeanalizowanie odpowiedzi z serwera. Dlatego te nigdy nie u ywaj XHR w trybie
synchronicznym, gdy mo e to doprowadzi do nieprzewidzianych opó nie w funkcjo-
nowaniu interfejsu u ytkownika, znacznie wykraczaj cych poza dopuszczalne granice.
Wp yw zu ycia pami ci na czas odpowiedzi
W tworzeniu responsywnych stron WWW wyst puje jeszcze inny kluczowy aspekt: zarz -
dzanie pami ci . Podobnie jak w wielu nowoczesnych j zykach wysokiego poziomu, które
zawieraj elementy niskopoziomowego zarz dzania pami ci , tak i w wi kszo ci rodowisk
uruchomieniowych JavaScriptu wyst puje mechanizm automatycznego oczyszczania pami ci
(ang. garbage collection, w skrócie GC). Mo e to by cudowne rozwi zanie, uwalniaj ce programi-
stów od nu cych detali kojarz cych si bardziej z ksi gowo ci ni z programowaniem.
Automatyczne zarz dzanie pami ci wi e si jednak z pewnym kosztem. Wszystkie z wyj t-
kiem najbardziej wyrafinowanych implementacji GC  zatrzymuj ca y wiat , przeprowa-
dzaj c oczyszczanie pami ci, tzn.  zamra aj  ca e rodowisko (w cznie z tym, co nazwali my
34 Rozdzia 2. Tworzenie responsywnych aplikacji WWW
g ównym w tkiem JavaScript przegl darki), podczas gdy same wykonuj ca mas czynno-
ci zwi zanych z tworzeniem obiektów oraz wyszukiwaniem tych, które nie s ju u ywane
i które mo na zutylizowa do nieu ywanych obszarów pami ci.
W przypadku wi kszo ci aplikacji proces GC jest ca kowicie przezroczysty; okresy zabloko-
wania rodowiska uruchomieniowego s na tyle krótkie, e ca kowicie umyka to uwadze u yt-
kownika. Jednak w miar zajmowania przez aplikacj coraz wi kszych obszarów pami ci wyd u-
a si czas niezb dny do wyszukania nieu ywanych obiektów i ostatecznie mo e osi gn
poziom, który b dzie zauwa alny dla u ytkownika.
Gdy to nast pi, aplikacja w do regularnych odst pach czasu b dzie dzia a mniej lub bar-
dziej oci ale; w miar narastania problemu mo e doj nawet do zablokowania przegl darki.
Oba te efekty mog doprowadzi u ytkownika do frustracji.
Wi kszo nowoczesnych platform dostarcza wyrafinowanych narz dzi umo liwiaj cych
monitorowanie wydajno ci procesu GC w rodowisku uruchomieniowym i podgl d bie cego
zestawu analizowanych obiektów w celu zdiagnozowania problemów zwi zanych z oczysz-
czaniem pami ci. Niestety, rodowiska uruchomieniowe JavaScriptu nie mieszcz si w tej
kategorii. Co gorsza, nie istniej adne narz dzia, które mog yby poinformowa programist
o tym, kiedy nast puje oczyszczanie pami ci lub ile czasu trwa jego przeprowadzenie. Wykorzy-
stuj c je, mo na by sprawdzi , czy zaobserwowane opó nienia maj zwi zek z procesem
oczyszczania pami ci.
Brak takich narz dzi jest powa n niedogodno ci dla twórców z o onych aplikacji Java-
Script dzia aj cych w oparciu o przegl darki. Na razie programi ci mog jedynie zgadywa ,
czy za opó nienia interfejsu u ytkownika odpowiada mechanizm automatycznego oczyszcza-
nia pami ci.
Pami wirtualna
Istnieje jeszcze inne niebezpiecze stwo zwi zane z pami ci : stronicowanie. W systemach
operacyjnych mamy dwa rodzaje pami ci udost pnianej aplikacjom: fizyczna i wirtualna.
Pami fizyczna to niezwykle szybkie modu y RAM zamontowane w komputerze; pami
wirtualna znajduje si na znacznie wolniejszych urz dzeniach pami ci masowej (np. na dysku
twardym), które swoj stosunkow powolno nadrabiaj znacznie wi ksz dost pn prze-
strzeni pami ci.
Je li wymagania pami ciowe Twojej strony WWW wzrosn w znacznym stopniu, system
operacyjny mo e by zmuszony do rozpocz cia stronicowania, niezwykle powolnego proce-
su, przez co inne procesy b d musia y zwolni zajmowan przez siebie pami fizyczn , aby
udost pni miejsce na rosn cy apetyt przegl darki. Proces ten nazywa si stronicowaniem,
poniewa wszystkie nowoczesne systemy operacyjne dziel pami na pojedyncze strony, tj.
najmniejsze jednostki pami ci, które s odwzorowywane do pami ci fizycznej lub wirtualnej.
W trakcie stronicowania strony te s przenoszone z pami ci fizycznej do pami ci wirtualnej
(tj. z pami ci RAM na dysk twardy) lub odwrotnie.
Spadek wydajno ci spowodowany stronicowaniem ró ni si od przerw wywo ywanych pro-
cesem oczyszczania pami ci; stronicowanie powoduje ogólne, wszechobecne spowolnienie,
natomiast opó nienia w procesie GC przejawiaj si zwykle w formie dyskretnych, pojedyn-
czych przerw wyst puj cych w okre lonych przedzia ach czasowych  cho d ugo tych
Zapewnienie responsywno ci 35
przerw ro nie wraz z up ywem czasu. Niezale nie od tych ró nic ka dy z tych problemów sta-
nowi znacz ce zagro enie dla osi gni cia Twojego celu, jakim jest utworzenie responsywnego
interfejsu u ytkownika.
Rozwi zywanie problemów zwi zanych z pami ci
Jak wspomnieli my wcze niej, nie znamy adnych dobrych narz dzi do diagnostyki pami ci
przeznaczonych dla aplikacji JavaScript uruchamianych w przegl darce. Póki co nale y ob-
serwowa zaj to pami ci procesu przegl darki (szczegó owe informacje na temat pomiaru
zaj to ci pami ci przez procesy w systemach Windows i OS X zawiera sekcja  Measuring
Memory Use pod adresem http://blog.pavlov.net/2008/03/11/firefox-3-memory-usage/). Je li pod-
czas dzia ania aplikacji zaj to pami ci wzrasta znacznie powy ej akceptowanych warto ci,
sprawd , czy w kodzie Twojej aplikacji s jakie mo liwo ci optymalizacji zu ycia pami ci.
Je li oka e si , e masz problem zwi zany z pami ci , powiniene poszuka mo liwo ci jej
oczyszczenia, je li jeszcze tego nie zrobi e . Mo esz to zrobi przez:
u ycie s owa kluczowego delete w celu usuni cia z pami ci zb dnych obiektów JavaScript,
usuni cie zb dnych w z ów z modelu DOM strony WWW.
Poni szy listing przedstawia sposób przeprowadzenia obu tych zada :
var page = { address: "http://jakis/adres/url" };
page.contents = getContents(page.address);
...
// pó niej zawarto nie b dzie ju d u ej potrzebna
delete page.contents;
...
var nodeToDelete = document.getElementById("redundant");
// usuniecie w z a z modelu DOM (co mo na zrobi jedynie
// przez wywo anie do removeChild() z w z a nadrz dnego)
// i równoczesne usuni cie w z a z pami ci
delete nodeToDelete.parent.removeChild(nodeToDelete);
Oczywi cie jest jeszcze wiele mo liwo ci ulepsze w zakresie optymalizacji zu ycia pami ci przez
strony WWW. W fundacji Mozilla zajmujemy si obecnie tworzeniem narz dzi przeznaczonych
do rozwi zywania tego rodzaju problemów. W chwili gdy czytasz t ksi k , co najmniej jedno
z takich narz dzi powinno by ju dost pne pod adresem http://labs.mozilla.com.
Podsumowanie
Ajax zapocz tkowa now er stron WWW dzia aj cych w oparciu o JavaScript. S one w rze-
czywisto ci aplikacjami dzia aj cymi w przegl darce i je li chodzi o interfejs u ytkownika, pod-
legaj takim samym wymogom jak ka da inna aplikacja. Istotne jest to, aby zapewnia y one
responsywno interfejsu przez zminimalizowanie operacji wykonywanych w g ównym
w tku aplikacji.
36 Rozdzia 2. Tworzenie responsywnych aplikacji WWW
Web Workers to pot ne nowe narz dzie, które mo na wykorzysta do przerzucenia skom-
plikowanych operacji zagra aj cych responsywno ci interfejsu u ytkownika. Je li nie mo na
u y Web Workers, mo emy wykorzysta dodatek Gears i timery JavaScriptu.
Z e zarz dzanie pami ci mo e doprowadzi do powstania problemów zwi zanych z wy-
dajno ci interfejsu u ytkownika. Mimo braku dobrych narz dzi do rozwi zywania proble-
mów z pami ci programi ci mog obserwowa wykorzystanie pami ci przez przegl dark
i w razie wyst pienia problemów podj odpowiednie kroki w celu zminimalizowania zaj -
to ci pami ci przez aplikacj . Dobra wiadomo jest taka, e trwaj ju prace nad utworzeniem
narz dzi do rozwi zywania problemów z pami ci .
Podsumowanie 37


Wyszukiwarka

Podobne podstrony:
Wydajne witryny internetowe Przyspieszanie dzialania serwisow WWW oprzep
XHTML i CSS Dostepne witryny internetowe
jQuery Tworzenie animowanych witryn internetowych jqtwan
jak dlugi dziala serwis
Skalowalne witryny internetowe Budowa, skalowanie i optymalizacja aplikacji internetowych nowej gene
Serwis www wstęp
fundamenty profesionalnego serwisu www [ PL ] Fundamenty profesjonalnego serwisu www
Web Analytics 2 0 swiadome rozwijanie witryn internetowych webswi
Tworzenie serwisow WWW Standardy sieciowe tswwws
Radia internetowe jak działają i jak ich słuchać
Projektowanie serwisów WWW Standardy sieciowe Wydanie III
Profesjonalny serwis WWW
Spis domen internetowych i podstawy działania usług sieciowych

więcej podobnych podstron