WYDAJNOŚĆ Dlaczego i jak?
PLAN 1. Dlaczego? 2. Jak uzyskać? 3. Jak mierzyć?
1. DLACZEGO?
creativerealities.com
raquelokyay.com
ripleypr.com
photos-public-domain.com
genius.com
2. JAK UZYSKAĆ?
FRONTEND
effectiveui.com
Na górze Wymagania jak najwcześniej
Selektory? ID!
<span class= link > <span class= logout > <a href= /logout class= important >....link.logout a.important
<span class= link > <span class= logout > <a href= /logout id= logout >... #logout
tutorgrams.com
Na dole O ile JS niepotrzebny do renderowania
khabargir.ir
//my own eval function myeval(code) { return eval(code); }function handlejsonp(object) { return object; }(function() { function interpretjsonp(code) { var data = myeval(code); //process data } })(); function myeval(code){return eval (code)}function handlejsonp(a) {return a}(function(){function a (b){var c=myeval(b)}})(); alistapart.com
W kupie siła
abc.net.au
document.write
Cena luksusu
var ids = []; ids[17] = 642532412; for (var id in ids) {... Powolne var ids = []; ids[17] = 642532412; for (var i = 0; i < ids.length; i++) {... Szybsze Mniej kłopotów
for (var i = 1; i <= 100; i++) { var number = $('<li>' + i + '</li>'); $('#numbers').append(number); } Powolne var fragment = $(document.createdocumentfragment()); for (var i = 1; i <= 100; i++) { var number = $('<li>' + i + '</li>'); fragment.append(number); } Szybsze $('#numbers').append(fragment); Skomplikowane
en.wikipedia.org
themefuse.com
CDN Blisko, szybko, tanio.
Połączenia Limit per domena. Więcej domen!
static0.example.com static1.example.com Więcej! static2.example.com static3.example.com
Przekierowania Dodatkowe opóźnienie.
Cache Szybki request = brak requestu.
Niepotrzebne? Nie wysyłaj. pcmaxuk.co.uk
gzip w locie accordbenchvices.com
BACKEND
spencerwade.com
Explain prawdę ci powie.
Esencja Indeksy Filesort
Esencja Denormalizacja - brak joinów. Dużo prostych zapytań.
bim9.com
Memcached Redis
oswaldatwork.thetaoofamp.com
get user_543_count_friend MISS
result = SELECT COUNT(*) FROM Friends WHERE user_id = 543; set user_543_count_friend result OK get user_543_count_friend 154
INSERT INTO Friends (user_id, friend_id) VALUES (543, 9709); readonlee.com
Spójność delete user_543_count_friend OK
flickr.com - Kovah
Mało plików. Akceleratory, np. APC. flickr.com - Blude
yiiframework.com
nexcess.net
Z rozwagą! Testy testami, a praktyka swoje.
foreach (post in posts) comments = query( SELECT title, date FROM Comments WHERE id =?, post.id)
foreach (post in posts) comments = query( SELECT title, date FROM Comments WHERE id =?, post.id) n + 1 Świadomie tyle razy? Jest cache?
comments = query( SELECT title, date FROM Comments WHERE id IN?, posts.map(id) + cache )
Cache uj raz Używaj wiele razy.
icustomizethesis.com
icustomizethesis.com
3. JAK MIERZYĆ?
Frontend
softpedia.com
Na co patrzeć? Czasy odpowiedzi. Nagłówki cache ujące.
Backend
ab, JMeter
ab -n 1000 -c 50 http://example.com/test/ łącznie 1 000 requestów 50 równolegle
Connection Times (ms) min Connect: Processing: Waiting: Total: 41 mean[+/-sd] median max 142 216.2 123 6112 279 1098 895.0 775 4779 372 765.6 176 4282 381 1240 927.8 916 9252 78 Zbyt duże odchylenie!
Skalowanie liniowe
czas odpowiedzi współbieżność
Maksymalna przepustowość
req/s współbieżność
Dziękuję analytics-toolkit.com