O privire generală privind performanța aplicațiilor Web la nivel de client. Detalii la http://profs.info.uaic.ro/~busaco/teach/courses/cliw/web-film.html
5. Dr.SabinBuragawww.purl.org/net/busaco
Viteza de încărcare a conținutului
factor major în evaluarea relevanței unui sit Web
dificultăți în găsirea parametrilor potriviți
– lungimea codului (HTML, CSS, JS), timpul de execuție
a programelor JS, manipularea arborelui DOM,... –
care să asigure o încărcare optimă
Steve Souders
7. Dr.SabinBuragawww.purl.org/net/busaco
Durata interacțiunii cu utilizatorul
necesitatea monitorizarii comportamentului codului
la nivelul navigatorului Web:
reducerea memoriei irosite (memory leaks)
dinamica numărului de noduri și structurii arborelui DOM
timpul de execuție a codului Javascript
minimizarea transferului de date preluate de la server(e)
...
11. Dr.SabinBuragawww.purl.org/net/busaco
Testarea performanței
depinde de mai multe condiții:
statutul utilizatorului – autentificat sau nu
rata de modificare în timp-real a conținutului
prezența reclamelor (ads)
configurația browser-ului (profil, extensii, plugin-uri,...)
starea cache-ului
platforma hardware & software la momentul exploatării
13. Dr.SabinBuragawww.purl.org/net/busaco
de experimentat utilitarul în linie de comandă + modulul Node.js:
https://github.com/marcelduran/webpagetest-api
statistici privind conexiunile efectuate pentru preluarea
resurselor (oferite de situl analizat + cele externe)
17. Dr.SabinBuragawww.purl.org/net/busaco
Regula 1: reducerea numărului cererilor HTTP
nu presupune diminuarea componentelor unei pagini
(foi de stil, imagini, script-uri,...)
implicații privind funcționalitatea
+ experiența utilizatorului cu aplicația (UX)
18. Dr.SabinBuragawww.purl.org/net/busaco
Regula 1: reducerea numărului cererilor HTTP
soluție:
CSS sprites
folosirea unei imagini unice
ce va include mai multe zone grafice ce pot fi „decupate”
și utilizate prin intermediul proprietăților CSS
27. Dr.SabinBuragawww.purl.org/net/busaco
Regula 1: reducerea numărului cererilor HTTP
soluție:
reunirea mai multor fișiere CSS/JavaScript
fișierele CSS sau JavaScript multiple pot fi combinate
într-un singur fișier CSS ori JavaScript, respectiv
(apoi eventual compresate)
30. Dr.SabinBuragawww.purl.org/net/busaco
Regula 2: folosirea unei rețele de distribuție
a conținutului (Content Distribution Network)
CDN – Content Distribution Network
colecție de servere Web distribuite geografic pentru a
asigura mai eficient rezolvarea cererilor de acces la date
31. Dr.SabinBuragawww.purl.org/net/busaco
Regula 2: folosirea unei rețele de distribuție
a conținutului (Content Distribution Network)
CDN – Content Distribution Network
colecție de servere Web distribuite geografic pentru a
asigura mai eficient rezolvarea cererilor de acces la date
Web farms, clusters, cloud computing
33. Dr.SabinBuragawww.purl.org/net/busaco
Regula 2: folosirea unei rețele de distribuție
a conținutului (Content Distribution Network)
CDN – Content Distribution Network
arhitectura client-server vs. peer-to-peer vs. hibridă
soluții (comerciale) disponibile: Akamai, Bitgravity,
Cachefly, CDNify, EdgeCast, Incapsula, Telefónica, XCDN
www.cdnplanet.com
34. Dr.SabinBuragawww.purl.org/net/busaco
Regula 2: folosirea unei rețele de distribuție
a conținutului (Content Distribution Network)
CDN – Content Distribution Network
livrarea de conținut static:
imagini, script-uri, foi de stiluri, multimedia
36. Dr.SabinBuragawww.purl.org/net/busaco
Regula 2: folosirea unei rețele de distribuție
a conținutului (Content Distribution Network)
CDN – Content Distribution Network
probleme care nu sunt rezolvate:
persistența conexiunilor, tranzacții, autentificare,
optimizări la nivel hardware,...
37. Dr.SabinBuragawww.purl.org/net/busaco
Regula 2: folosirea unei rețele de distribuție
a conținutului (Content Distribution Network)
CDN – Content Distribution Network
probleme care nu sunt rezolvate:
persistența conexiunilor, tranzacții, autentificare,
optimizări la nivel hardware,...
recurgerea la soluții mai complexe de găzduire Web
(inclusiv, cele bazate pe cloud computing)
41. Dr.SabinBuragawww.purl.org/net/busaco
Regula 3: setarea timpului de expirare a paginii
soluție:
folosirea câmpului Expires în antetul unui mesaj HTTP
indică browser-ului/proxy-ului
dacă trebuie reîmprospătat cache-ul
Expires: Sat, 07 Feb 2015 07:33:00 GMT
42. Dr.SabinBuragawww.purl.org/net/busaco
Regula 3: setarea timpului de expirare a paginii
soluție:
folosirea câmpului Expires în antetul unui mesaj HTTP
stabilirea unui timp în viitor va determina păstrarea
pe perioadă îndelungată a conținutului paginii Web
în cache-ul local
44. Dr.SabinBuragawww.purl.org/net/busaco
Regula 3: setarea timpului de expirare a paginii
soluție:
controlul politicii de actualizare a cache-ului
via Cache-Control – câmp în antetul HTTP
specificarea perioadei de secunde pentru care
o componentă e păstrată în cache prin directiva max-age
47. Dr.SabinBuragawww.purl.org/net/busaco
Regula 3: setarea timpului de expirare a paginii
observație:
valoarea campului Expires e absolută (dată de calendar),
iar timpul max-age de păstrare în cache este relativ
(număr de secunde față de momentul curent)
vezi K. Young, “A Beginner's Guide to HTTP Cache Headers” (2013)
www.mobify.com/blog/beginners-guide-to-http-cache-headers/
50. Dr.SabinBuragawww.purl.org/net/busaco
Regula 4: compresarea conținutului resurselor
soluție:
mesajul de răspuns HTTP poate fi transmis compresat
pot fi compresate în special resursele textuale:
documente HTML, foi de stiluri CSS, programe JavaScript
51. Dr.SabinBuragawww.purl.org/net/busaco
Regula 4: compresarea conținutului resurselor
soluție:
mesajul de răspuns HTTP poate fi transmis compresat
evident, compresarea trebuie să fie oferită
de serverul Web utilizat – mod_deflate pentru Apache
52. Dr.SabinBuragawww.purl.org/net/busaco
Regula 4: compresarea conținutului resurselor
soluție:
mesajul de răspuns HTTP poate fi transmis compresat
pentru navigatoarele Web care nu au suport pentru gzip,
decompresia se poate realiza la nivel de proxy
54. Dr.SabinBuragawww.purl.org/net/busaco
Regula 5: plasarea foilor CSS în antetul paginii
uzual, componentele sunt transferate de pe server
în ordinea specificării lor în documentul HTML
proprietățile CSS trebuie încărcate primele
pentru ca browser-ul să poată reda conținutul
conform stilurilor precizate
progressive rendering
56. Dr.SabinBuragawww.purl.org/net/busaco
Regula 6: plasarea script-urilor la finalul paginii
context:
download-urile paralele
timpul de răspuns este dat de numărul de componente
dintr-o pagină (fiecare generând o cerere HTTP
dacă nu e disponibilă în cache)
57. Dr.SabinBuragawww.purl.org/net/busaco
Regula 6: plasarea script-urilor la finalul paginii
context:
download-urile paralele
navigatoarele Web limitează numărul de download-uri
paralele per domeniu al sitului Web (2—6 transferuri)
58. Dr.SabinBuragawww.purl.org/net/busaco
Regula 6: plasarea script-urilor la finalul paginii
context:
download-urile paralele
script-urile JavaScript blochează
transferul paralel al altor resurse
(programul ar putea schimba conținutul paginii,
deci navigatorul va încerca să nu altereze arborele DOM)
62. Dr.SabinBuragawww.purl.org/net/busaco
Regula 7: fișierele JavaScript/CSS externe
deși programele/stilurile specificate direct (inline)
în cadrul documentului HTML sunt procesate mai rapid,
fișierele externe pot fi stocate în cache-ul navigatorului
63. Dr.SabinBuragawww.purl.org/net/busaco
Regula 7: fișierele JavaScript/CSS externe
deși programele/stilurile specificate direct (inline)
în cadrul documentului HTML sunt procesate mai rapid,
fișierele externe pot fi stocate în cache-ul navigatorului
refolosirea lor pentru mai multe pagini sau situri Web
64. Dr.SabinBuragawww.purl.org/net/busaco
Regula 7: fișierele JavaScript/CSS externe
soluția „optimă” depinde de context:
totalul vizualizărilor paginii (page views)
starea cache-ului – empty cache vs. primed cache
gradul de reutilizare a componentelor
65. Dr.SabinBuragawww.purl.org/net/busaco
Regula 7: fișierele JavaScript/CSS externe
tehnici:
post-onload download
dacă pagina principală are cele mai multe vizite,
programele JavaScript și stilurile CSS se pot „scufunda”
direct în documentul HTML, urmând ca alte componente
adiționale să fie încărcate – asincron – via fișiere externe
66. Dr.SabinBuragawww.purl.org/net/busaco
Regula 7: fișierele JavaScript/CSS externe
tehnici:
dynamic inlining
dacă detectăm că o componentă există deja în cache-ul
browser-ului, putem stabili care fragmente de cod
să fie stocate intern și care să fie transferate (externe)
68. Dr.SabinBuragawww.purl.org/net/busaco
Regula 8: reducerea cererilor de rezolvare
a domeniilor (DNS lookups)
realitate:
fiecare cerere realizată de navigatorul Web
pentru rezolvarea unui nume simbolic de domeniu
în vederea obținerii adresei IP a acestuia consumă timp
71. Dr.SabinBuragawww.purl.org/net/busaco
Regula 8: reducerea cererilor de rezolvare
a domeniilor (DNS lookups)
constatare:
păstrarea în cache-ul DNS local (la nivel de client)
a perechii <domeniu simbolic, adresa IP>
depinde de timpul de viață asociat domeniului
(TTL – Time To Live)
valori tipice: minute sau ore
76. Dr.SabinBuragawww.purl.org/net/busaco
Regula 9: reducerea mărimii fișierelor JavaScript
soluție alternativă:
JavaScript obfuscation
tehnică de optimizare care elimină atât comentariile și
spațiile albe, cât rescrie codul în vederea reducerii
dimensiunii fișierului (modificarea numelui variabilelor,
ori funcțiilor, compactarea șirurilor de caractere,...)
82. Dr.SabinBuragawww.purl.org/net/busaco
Regula 10: evitarea redirecționărilor
300 Multiple Choices (pe baza câmpului Content-Type)
301 Moved Permanently
302 Moved Temporarily
303 See Other (clarificare a mesajului 302)
304 Not Modified (datele sunt deja în cache)
307 Temporary Redirect (clarificare a mesajului 302)
83. Dr.SabinBuragawww.purl.org/net/busaco
Regula 10: evitarea redirecționărilor
soluții clasice:
la nivel de server – via câmpul-antet HTTP Location
la client – folosind elementul HTML
<meta http-equiv="refresh" .../>
sau recurgând la document.location în JavaScript
85. Dr.SabinBuragawww.purl.org/net/busaco
Regula 10: evitarea redirecționărilor
rezolvări:
adăugarea caracterului / la finalul unui URL
pentru a preîntâmpina redirecționările de tip 301
soluții tehnologice:
Alias și/sau DirectorySlash pentru serverul Apache
87. Dr.SabinBuragawww.purl.org/net/busaco
Regula 10: evitarea redirecționărilor
rezolvări:
monitorizarea traficului,
pentru a detecta redirecționările frecvente
(inclusiv cele via servicii de scurtare a adreselor Web
precum bit.ly, tinyurl.com etc.)
90. Dr.SabinBuragawww.purl.org/net/busaco
Regula 11: eliminarea script-urilor duplicate
soluție:
implementarea unui mecanism de management
al încărcării programelor JavaScript
de exemplu, via sistemul de aplicare
a machetelor de redare – templating system
93. Dr.SabinBuragawww.purl.org/net/busaco
Regula 12: configurarea ETag-urilor
ETag (entity tag)
versiunea (starea) unei componente – aici, entitate –
a paginii Web este identificată unic via un ETag
pentru a se putea aplica o anumită politică
de eliminare/păstrare (d)in cache
95. Dr.SabinBuragawww.purl.org/net/busaco
Regula 12: configurarea ETag-urilor
ETag (entity tag)
nu există un mecanism standardizat de specificare,
deoarece se bazează pe atribute dependente de server
ETag-urile generate de Apache nu au același format
cu cele create de IIS
106. Dr.SabinBuragawww.purl.org/net/busaco
Regula 14: folosirea metodei GET
pentru cereri Ajax
pentru POST, browser-ul recurge la 2 etape:
trimiterea câmpurilor din antet,
apoi transmiterea efectivă a datelor
pentru a prelua de pe server date, vom utiliza GET
111. Dr.SabinBuragawww.purl.org/net/busaco
Regula 16: divizarea componentelor între domenii
efect: maximizarea transferurilor paralele
nu vor fi folosite mai mult de 2—4 domenii diferite,
pentru a nu apărea penalități vizând interogările DNS
112. Dr.SabinBuragawww.purl.org/net/busaco
Alte reguli – mai ales în contextul Web-ului mobil:
preîncărcarea (condiționată ori anticipată) a resurselor
minimizarea accesului la arborele DOM
mărimea necompresată a unei componente să fie < 25 K
împachetarea componentelor într-un document multipart
de studiat tutorialul oferit de Maximiliano Firtman (2014)
http://firtman.github.io/velocity/
121. Dr.SabinBuragawww.purl.org/net/busaco
Evaluarea performanței aplicațiilor Web
numeroase alte resurse,
incluzând instrumente și tehnici de optimizare Web:
http://is.gd/web_perf_tools
http://www.webperformancetoday.com/
o listă de contra-exemple: http://perf.fail/
de asemenea, a se consulta http://calendar.perfplanet.com/
134. Dr.SabinBuragawww.purl.org/net/busaco
Resurse suplimentare
Steve Souders, High Performance Web Sites, O’Reilly, 2007
Steve Souders, Even Faster Web Sites, O’Reilly, 2009
http://stevesouders.com/
Ilya Grigorik, High Performance Browser Networking,
O’Reilly, 2013:
http://chimera.labs.oreilly.com/books/1230000000545/
prezentările susținute de Ilya Grigorik:
http://lanyrd.com/profile/igrigorik/sessions/
140. Dr.SabinBuragawww.purl.org/net/busaco
Timpul de viață a bateriei
dependent de factori precum:
utilizarea procesorului, reafișarea conținutului
(repainting), interpretarea și rularea codului JS,
traficul de rețea – inclusiv aspecte privind GPS
N.Thiagarajan et al., “Who Killed My Battery: Analyzing
Mobile Browser Energy Consumption”, WWW2012
www2012.wwwconference.org/proceedings/proceedings/p41.pdf
141. Dr.SabinBuragawww.purl.org/net/busaco
Latența rețelei
viteza ~ percepție a încărcării
vitezele de transfer (download + upload) variază
ca și în cazul aplicațiilor Web tradiționale, se vizează
transferul de reprezentări de resurse HTML, CSS,
multimedia, cod JS (al aplicației + adițional), date
142. Dr.SabinBuragawww.purl.org/net/busaco
„Scufundarea” unor resurse direct în HTML
în cazul Web-ului mobil, pot apărea îmbunătățiri de
performanță dacă stilurile CSS și programele JavaScript
sunt incluse în pagina HTML la prima încărcare a sitului
exemplu notabil: m.bing.com
vezi http://calendar.perfplanet.com/2011/mobile-ui-performance-considerations/
146. Dr.SabinBuragawww.purl.org/net/busaco
Folosirea facilităților oferite de CSS
uzual, browser-ele dispozitivelor mobile
oferă suport pentru CSS nivelul 3
aplicare de proprietăți per dispozitiv (media queries)
efecte grafice realizate exclusiv cu CSS: umbre, animații,…
dezavantaje: memorie + timp de procesare mai mare
https://speakerdeck.com/addyosmani/css-performance-tooling
http://davidwalsh.name/css-js-animation
148. Dr.SabinBuragawww.purl.org/net/busaco
Interacțiunea cu utilizatorul
navigatoarele Web mobile folosesc un unic fir de execuție
(single threaded)
anumite acțiuni din partea utilizatorului pot conduce la
timpi de așteptareoferirea de feedback vizual
se poate recurge la API-uri specifice standardizate:
http://www.w3.org/standards/techs/js
151. Dr.SabinBuragawww.purl.org/net/busaco
Studii de caz și alte resurse de interes:
R. Fioravanti, Building High Performance Mobile Web
Applications (2012): http://rjf-io2012.appspot.com/
A. Davies, Speed is Essential for a Great Web Experience
(2014): http://tinyurl.com/mrs37ey
prezentările conferințelor Velocity
velocityconf.com/velocity2014/public/schedule/proceedings
velocityconf.com/velocity2013/public/schedule/proceedings
velocityconf.com/velocity2012/public/schedule/proceedings
152. Dr.SabinBuragawww.purl.org/net/busaco
Instrumente vizând dezvoltarea
aplicațiilor Web mobile – exemplificări:
W3C mobileOK Checker – http://validator.w3.org/mobile/
jQuery Mobile – http://jquerymobile.com/
Sencha Touch – http://www.sencha.com/products/touch
SproutCore – http://sproutcore.com/
Firefox OS – www.info.uaic.ro/~busaco/teach/labs/firefoxos/
Mobile Web Programming – www.mobilexweb.com/