13. Waarom performanceWaarom performance
Als je een business case hebt voor een websiteAls je een business case hebt voor een website
ben je deze kwijt als je te langzaam bent...ben je deze kwijt als je te langzaam bent...
15. Time to glassTime to glass
• 0,1 seconde, voelt als instant0,1 seconde, voelt als instant
• 1.0 seconde, in de flow1.0 seconde, in de flow
• 10,0 seconde, aandachtslimiet10,0 seconde, aandachtslimiet
• ““perceptie van snelheid”perceptie van snelheid”
16.
17.
18.
19. 80% frontend80% frontend 20% backend20% backendPerformance is enkel100% relevant in de browserPerformance is enkel100% relevant in de browser
20. Bij mij is ‘ie wel snelBij mij is ‘ie wel snel
21. Want ik ben centrumWant ik ben centrum
van de wereldvan de wereld
22. Maar we zijn toch heelMaar we zijn toch heel
snel?snel?
24. MetricsMetrics
• Als je het niet kan metenAls je het niet kan meten
kan je het niet verbeteren.kan je het niet verbeteren.
• ProjectPAAS meet 100 metrics, analyseertProjectPAAS meet 100 metrics, analyseert
en rapporteert hieroveren rapporteert hierover
26. Wat doet uWat doet u
• Installeer d.o/project/paas op dev serverInstalleer d.o/project/paas op dev server
• Configureer op portaal (basic auth, 100Configureer op portaal (basic auth, 100
populaire URL’s, tijd...)populaire URL’s, tijd...)
• Wacht 6 uurWacht 6 uur
27. Wat doen wij?Wat doen wij?
• Controlen module werking / keyControlen module werking / key
• Starten EC2 instantie(s)Starten EC2 instantie(s)
• Meten 100+ metrics (met / zonder,Meten 100+ metrics (met / zonder,
screenshots, latency....)screenshots, latency....)
• Analyseren tegen baselineAnalyseren tegen baseline
• Doen aanbeveling in PDF (plus files)Doen aanbeveling in PDF (plus files)
• Mailen uMailen u
28.
29.
30.
31.
32.
33.
34.
35. Tooling ‘n TipsTooling ‘n Tips
Tools voor infrastructuur
- ec2
- lamp
- python
- nodejs
- java
- drupal 7
- latex
- twig
- graphviz
- flot (graphs)
Tools voor metingen en analyse
- custom client module
- phantom
- custom proxy in python
- kyotocabinet (storage voor proxy)
- R project (statistics)
- imagemagick
- pngcrush
- optipng
- csstidy
- openssl
- libjpeg
- cairo (graphics library)
- closure compiler
- ab
- sabberworm (css analyse)
- yslow
- shadow
39. CDN / ParallelCDN / Parallel
- Vroeger meer hits
- Toen dichter bij / minder latency
- Nu met name anti dDOS
- default cookieloos
- niet default sneller
45. Best hit is no hitBest hit is no hit
(less is more)(less is more)
(less is more)(less is more)
SPDY (compressie, binair)
Multipart response
Servers dichtbij (CDN)
Minder requests
46. Apache multipartApache multipart
responseresponse
Content-Type: multipart/mixed; boundary="..."
Onderseund in recente versies FF, Chrome + iE < 7
Niet hoe HTTP werkt, 'multipart requests' bestaan
niet (vraag A op, geef ABC terug)
0.000184% usage volgens Mozilla team
Geen ondersteuning in Apache / NginX
48. Gebruik geen HTTPS!Gebruik geen HTTPS!
Tuurlijk wel
Maar default 24-32% trager!
Apache heeft standaard 28 chipher suits
9 max nodig
HTTPS niet in varnish zonder SSL offloader
49. Gebruik HTTPS!Gebruik HTTPS!
SPDY
Wordt standaard HTTP/2.0?
In gebruik alle sites van google en facebook
Vereist certificaat (443) (wildcard?)
Niet te troubleshooten
54. PHP Memory usagePHP Memory usage
BucketsBuckets
BucketsBucketsBevat de key, pointers naar data, vorige,
volgende, eerste, laatste element..
Totaal: 96 bytes
Array van 10 int's heeft 40 bytes data.
1 zval met 10 buckets en 10 zvals voor data
Totaal: 1488 bytes (PHP 5.4)
37.2 x meer dan in C
56. MySQL is slimMySQL is slim
Relationele databases:
DBMS bepaald hoe de data het beste opgehaald kan
worden
DBMS weet niet hoe we de data gebruiken
DOM
57. Pagina moet ladenPagina moet laden
binnen 2 secondebinnen 2 seconde
• MySQL zal slow query af makenMySQL zal slow query af maken
• Ook als deze 2 uur duurt...Ook als deze 2 uur duurt...
58. CardinaliteitCardinaliteit
Aantal verschillende waarden in een kolom.
Indexen worden meestal niet gebruikt wanneer
cardinaliteit laag is (bijv. 10% van aantal rijen). Gaat
uit van gelijke verdeling!
InnoDB doet analyse op selectivity:
hoeveel rijen blijven er over na filtering?
59. Union vs ORUnion vs OR
SELECT ... WHERE (a) OR (b)
SELECT ... WHERE (a)
UNION
SELECT ... WHERE (b)
60. TrickyTricky
- Grootste deel van de filtering in joined tables
- Order by op joined tables
- Order by i.c.m. seq. scan
- Joins op kolom zonder index
(of mogelijkheid tot het gebruik daarvan)
61.
62.
63. Free ride?Free ride?
Eerste die nu een easter-egg vindt op
projectpaas.com en hierover twittert krijgt
gratis “pluto” test!