SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Jak řešíme performance, aneb jak neshodit web TV reklamou
@glamibackstage
Vyhledávač módy
- 9 zemí + 4 brzy
- 60 lidí, 8 národností
- 9 devs, (7 web + 2 app)
- Liberec (dev) + zde (zbytek)
- Php, MySql, elastic, clickhouse
- AI (podobné produkty, kategorizace, barvy)
- 20+M req / den (30 M 🎄?)
Reklama v TV
Benefity
- rychlejší web = šťastný uživatel
- ušetříte za hardware
- odolnost proti peakům
- rychlejší testy (pomalé testy nikdo nespouští)
Backend
Co bývá špatně
- [DB] duplicitní volání DB dotazů
- [DB] použitý špatný (žádný) index
- [DB ]vybírání hodnot pomocí id = 1 místo využití IN (1, 2, 3)
- [DB] řazení na disku (typicky sloupec s dlouhým řetězcem při řazení)
- externí služby (pomalé, padající)
- špatný kód (vložené cykly, in_array, serializace, debug data)
Backend
Co měříme?
- CPU (~ PHP), DB, elasticsearch, externí služby
- přihlášený vs. nepřihlášený už.
- roboti vs. lidé vs. naši admini
Jak měříme?
1. agregovaná data si postupně ukládáme do APC a jednou za čas
posíláme do DB
2. u pomalých stránek si ihned uložíme úplně všechno co se na té
stránce dělo do DB
Agregovaná data
Pomalé dotazy
- u všech pomalých stránek (> 500 ms) si ukládáme všechno co jde
Pomalé dotazy
Odměna
Co nám pomáhá
- www.vividcortex.com
- www.thinkwithgoogle.com/feature/mobile/
- Google Analytics (Přehled rychlosti webu)
- www.pingdom.com
The little things
- code review FTW
- testy (unit, DB, selenium, HTTP testy)
- PHPStan
- canary release
Slackbot reports
Frontend
- Page load time matters!
- Zaměřujeme se na mobil, >50% jsou mobilní sessions a exity do
shopů (záleží na reklamě)
- Sledujeme firstContentfulPaint
- Reportujeme pomocí GA eventu, z GA taháme přes AddOn do Google
Spreadsheet
- Pingdom Page Speed - objevili jsme zvětšení JS o 100kb (requirejs a
ES5)
- Chrome inspector, webpagetest.org (kdyz jsme nasazovali http2
nebo pro AB testování)
Frontend - Jak?
- Snažíme se, aby uživatel co nejdříve viděl smysluplný obsah (FCP)
- Co nejmenší HTML a CSS (render blocking)
- Inline CSS na 1. načtení pro non-H2 klienty
- H2 Server Push pro CSS
- Lazyloadujeme, co se dá (pomocí IntersectionObserver API)
- WebP obrázky a WebM videa a brotli kompresi
- Resource Hints:
- preconnect na remarketing
- <link rel="dns-prefetch preconnect" href="https://www.google-analytics.com">
- preload na místech, kde nám to dává smysl
Tools
- Google Lighthouse (audit stránky)
- performance
- pristupnost
- https://www.thinkwithgoogle.com/feature/mobile/
- Porovnání rychlosti reálných uživatelů sbírané z Google Chrome
- Dobrý na porovnání vaší služby vs. konkurence
Hledáme nové kolegy
do Prahy i Liberce
Glami - jak řešíme performance, aneb jak neshodit web TV reklamou

Weitere ähnliche Inhalte

Ähnlich wie Glami - jak řešíme performance, aneb jak neshodit web TV reklamou

SEO pohledem datového analytika
SEO pohledem datového analytikaSEO pohledem datového analytika
SEO pohledem datového analytikaTaste Medio
 
"Multiplatformní" je sprosté slovo!?
"Multiplatformní" je sprosté slovo!?"Multiplatformní" je sprosté slovo!?
"Multiplatformní" je sprosté slovo!?Trinerdis
 
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)Jakub Kulhan
 
moderni webapp - frontend
moderni webapp - frontendmoderni webapp - frontend
moderni webapp - frontendTomas Hodbod
 
Hobby Developer 3.0: Tipy a triky pro web
Hobby Developer 3.0: Tipy a triky pro webHobby Developer 3.0: Tipy a triky pro web
Hobby Developer 3.0: Tipy a triky pro webTomáš Muchka
 
SEO jako Brno - Technické SEO
SEO jako Brno - Technické SEOSEO jako Brno - Technické SEO
SEO jako Brno - Technické SEOFilip Podstavec
 
Blbosti kolem webové rychlosti
Blbosti kolem webové rychlostiBlbosti kolem webové rychlosti
Blbosti kolem webové rychlostiMartin Michálek
 
Generátory statických webů
Generátory statických webůGenerátory statických webů
Generátory statických webůMichal Doležel
 
Borek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webBorek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webDevelcz
 
Odborná snídaně v Profinitu 30. 5. 2017 - Firemní portály: rychle a moderně
Odborná snídaně v Profinitu 30. 5. 2017 - Firemní portály: rychle a moderněOdborná snídaně v Profinitu 30. 5. 2017 - Firemní portály: rychle a moderně
Odborná snídaně v Profinitu 30. 5. 2017 - Firemní portály: rychle a moderněProfinit
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)almadcz
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitněJiří Mareš
 
Výkonnost webových aplikací
Výkonnost webových aplikacíVýkonnost webových aplikací
Výkonnost webových aplikacíTaste Medio
 
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptČtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptCtvrtkoncz
 
20101124 Aplikované nástroje SW inženýra
20101124 Aplikované nástroje SW inženýra20101124 Aplikované nástroje SW inženýra
20101124 Aplikované nástroje SW inženýraJiří Mareš
 
JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017Michal Blažek
 
Automatizace search term optimalizace
Automatizace search term optimalizaceAutomatizace search term optimalizace
Automatizace search term optimalizaceTaste Medio
 
PROFICIO na PPC Restartu 2018
PROFICIO na PPC Restartu 2018PROFICIO na PPC Restartu 2018
PROFICIO na PPC Restartu 2018PROFICIO
 
NoSQL databáze, MongoDB
NoSQL databáze, MongoDBNoSQL databáze, MongoDB
NoSQL databáze, MongoDBLukas Korous
 

Ähnlich wie Glami - jak řešíme performance, aneb jak neshodit web TV reklamou (20)

SEO pohledem datového analytika
SEO pohledem datového analytikaSEO pohledem datového analytika
SEO pohledem datového analytika
 
"Multiplatformní" je sprosté slovo!?
"Multiplatformní" je sprosté slovo!?"Multiplatformní" je sprosté slovo!?
"Multiplatformní" je sprosté slovo!?
 
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
 
moderni webapp - frontend
moderni webapp - frontendmoderni webapp - frontend
moderni webapp - frontend
 
Hobby Developer 3.0: Tipy a triky pro web
Hobby Developer 3.0: Tipy a triky pro webHobby Developer 3.0: Tipy a triky pro web
Hobby Developer 3.0: Tipy a triky pro web
 
TNPW2-2014-05
TNPW2-2014-05TNPW2-2014-05
TNPW2-2014-05
 
SEO jako Brno - Technické SEO
SEO jako Brno - Technické SEOSEO jako Brno - Technické SEO
SEO jako Brno - Technické SEO
 
Blbosti kolem webové rychlosti
Blbosti kolem webové rychlostiBlbosti kolem webové rychlosti
Blbosti kolem webové rychlosti
 
Generátory statických webů
Generátory statických webůGenerátory statických webů
Generátory statických webů
 
Borek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro webBorek Bernard: TypeScript - příčetný jazyk pro web
Borek Bernard: TypeScript - příčetný jazyk pro web
 
Odborná snídaně v Profinitu 30. 5. 2017 - Firemní portály: rychle a moderně
Odborná snídaně v Profinitu 30. 5. 2017 - Firemní portály: rychle a moderněOdborná snídaně v Profinitu 30. 5. 2017 - Firemní portály: rychle a moderně
Odborná snídaně v Profinitu 30. 5. 2017 - Firemní portály: rychle a moderně
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)
 
20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně
 
Výkonnost webových aplikací
Výkonnost webových aplikacíVýkonnost webových aplikací
Výkonnost webových aplikací
 
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScriptČtvrtkon #71 - Marian Benčat - Angular a NativeScript
Čtvrtkon #71 - Marian Benčat - Angular a NativeScript
 
20101124 Aplikované nástroje SW inženýra
20101124 Aplikované nástroje SW inženýra20101124 Aplikované nástroje SW inženýra
20101124 Aplikované nástroje SW inženýra
 
JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017JavaScript v GTM - Measure Camp Brno 2017
JavaScript v GTM - Measure Camp Brno 2017
 
Automatizace search term optimalizace
Automatizace search term optimalizaceAutomatizace search term optimalizace
Automatizace search term optimalizace
 
PROFICIO na PPC Restartu 2018
PROFICIO na PPC Restartu 2018PROFICIO na PPC Restartu 2018
PROFICIO na PPC Restartu 2018
 
NoSQL databáze, MongoDB
NoSQL databáze, MongoDBNoSQL databáze, MongoDB
NoSQL databáze, MongoDB
 

Mehr von Petr Bechyně

Adam Szabo: Jak jsme v Driveto zlepšovali konverze
Adam Szabo: Jak jsme v Driveto zlepšovali konverzeAdam Szabo: Jak jsme v Driveto zlepšovali konverze
Adam Szabo: Jak jsme v Driveto zlepšovali konverzePetr Bechyně
 
Péhápkaři - Píšeme čitelný a testovatelný kód #5 by Driveto dev team
Péhápkaři - Píšeme čitelný a testovatelný kód #5 by Driveto dev teamPéhápkaři - Píšeme čitelný a testovatelný kód #5 by Driveto dev team
Péhápkaři - Píšeme čitelný a testovatelný kód #5 by Driveto dev teamPetr Bechyně
 
Péhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, DrivetoPéhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, DrivetoPetr Bechyně
 
Doctrine Data migrations | May 2017
Doctrine Data migrations | May 2017Doctrine Data migrations | May 2017
Doctrine Data migrations | May 2017Petr Bechyně
 
SEO Restart 2015 - Collabim
SEO Restart 2015 - CollabimSEO Restart 2015 - Collabim
SEO Restart 2015 - CollabimPetr Bechyně
 
Péhápkaři - Píšeme čitelný kód #3 by Driveto
Péhápkaři - Píšeme čitelný kód #3 by DrivetoPéhápkaři - Píšeme čitelný kód #3 by Driveto
Péhápkaři - Píšeme čitelný kód #3 by DrivetoPetr Bechyně
 
Péhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, DrivetoPéhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, DrivetoPetr Bechyně
 
Péhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, DrivetoPéhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, DrivetoPetr Bechyně
 
Svlékněte konkurenci donaha: Jiří Koutný, Collabim
Svlékněte konkurenci donaha: Jiří Koutný, CollabimSvlékněte konkurenci donaha: Jiří Koutný, Collabim
Svlékněte konkurenci donaha: Jiří Koutný, CollabimPetr Bechyně
 
Pionýři Digitálu #2 - Klíčová analýza slov
Pionýři Digitálu #2 - Klíčová analýza slovPionýři Digitálu #2 - Klíčová analýza slov
Pionýři Digitálu #2 - Klíčová analýza slovPetr Bechyně
 

Mehr von Petr Bechyně (10)

Adam Szabo: Jak jsme v Driveto zlepšovali konverze
Adam Szabo: Jak jsme v Driveto zlepšovali konverzeAdam Szabo: Jak jsme v Driveto zlepšovali konverze
Adam Szabo: Jak jsme v Driveto zlepšovali konverze
 
Péhápkaři - Píšeme čitelný a testovatelný kód #5 by Driveto dev team
Péhápkaři - Píšeme čitelný a testovatelný kód #5 by Driveto dev teamPéhápkaři - Píšeme čitelný a testovatelný kód #5 by Driveto dev team
Péhápkaři - Píšeme čitelný a testovatelný kód #5 by Driveto dev team
 
Péhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, DrivetoPéhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #4 by Petr Bechyně, Driveto
 
Doctrine Data migrations | May 2017
Doctrine Data migrations | May 2017Doctrine Data migrations | May 2017
Doctrine Data migrations | May 2017
 
SEO Restart 2015 - Collabim
SEO Restart 2015 - CollabimSEO Restart 2015 - Collabim
SEO Restart 2015 - Collabim
 
Péhápkaři - Píšeme čitelný kód #3 by Driveto
Péhápkaři - Píšeme čitelný kód #3 by DrivetoPéhápkaři - Píšeme čitelný kód #3 by Driveto
Péhápkaři - Píšeme čitelný kód #3 by Driveto
 
Péhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, DrivetoPéhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #2 by Petr Bechyně, Driveto
 
Péhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, DrivetoPéhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, Driveto
Péhápkaři - Píšeme čitelný kód #1 by Petr Bechyně, Driveto
 
Svlékněte konkurenci donaha: Jiří Koutný, Collabim
Svlékněte konkurenci donaha: Jiří Koutný, CollabimSvlékněte konkurenci donaha: Jiří Koutný, Collabim
Svlékněte konkurenci donaha: Jiří Koutný, Collabim
 
Pionýři Digitálu #2 - Klíčová analýza slov
Pionýři Digitálu #2 - Klíčová analýza slovPionýři Digitálu #2 - Klíčová analýza slov
Pionýři Digitálu #2 - Klíčová analýza slov
 

Glami - jak řešíme performance, aneb jak neshodit web TV reklamou

  • 1. Jak řešíme performance, aneb jak neshodit web TV reklamou @glamibackstage
  • 2. Vyhledávač módy - 9 zemí + 4 brzy - 60 lidí, 8 národností - 9 devs, (7 web + 2 app) - Liberec (dev) + zde (zbytek) - Php, MySql, elastic, clickhouse - AI (podobné produkty, kategorizace, barvy) - 20+M req / den (30 M 🎄?)
  • 4. Benefity - rychlejší web = šťastný uživatel - ušetříte za hardware - odolnost proti peakům - rychlejší testy (pomalé testy nikdo nespouští)
  • 6. Co bývá špatně - [DB] duplicitní volání DB dotazů - [DB] použitý špatný (žádný) index - [DB ]vybírání hodnot pomocí id = 1 místo využití IN (1, 2, 3) - [DB] řazení na disku (typicky sloupec s dlouhým řetězcem při řazení) - externí služby (pomalé, padající) - špatný kód (vložené cykly, in_array, serializace, debug data)
  • 7. Backend Co měříme? - CPU (~ PHP), DB, elasticsearch, externí služby - přihlášený vs. nepřihlášený už. - roboti vs. lidé vs. naši admini Jak měříme? 1. agregovaná data si postupně ukládáme do APC a jednou za čas posíláme do DB 2. u pomalých stránek si ihned uložíme úplně všechno co se na té stránce dělo do DB
  • 9. Pomalé dotazy - u všech pomalých stránek (> 500 ms) si ukládáme všechno co jde
  • 12. Co nám pomáhá - www.vividcortex.com - www.thinkwithgoogle.com/feature/mobile/ - Google Analytics (Přehled rychlosti webu) - www.pingdom.com
  • 13. The little things - code review FTW - testy (unit, DB, selenium, HTTP testy) - PHPStan - canary release
  • 15. Frontend - Page load time matters! - Zaměřujeme se na mobil, >50% jsou mobilní sessions a exity do shopů (záleží na reklamě) - Sledujeme firstContentfulPaint - Reportujeme pomocí GA eventu, z GA taháme přes AddOn do Google Spreadsheet - Pingdom Page Speed - objevili jsme zvětšení JS o 100kb (requirejs a ES5) - Chrome inspector, webpagetest.org (kdyz jsme nasazovali http2 nebo pro AB testování)
  • 16.
  • 17.
  • 18. Frontend - Jak? - Snažíme se, aby uživatel co nejdříve viděl smysluplný obsah (FCP) - Co nejmenší HTML a CSS (render blocking) - Inline CSS na 1. načtení pro non-H2 klienty - H2 Server Push pro CSS - Lazyloadujeme, co se dá (pomocí IntersectionObserver API) - WebP obrázky a WebM videa a brotli kompresi - Resource Hints: - preconnect na remarketing - <link rel="dns-prefetch preconnect" href="https://www.google-analytics.com"> - preload na místech, kde nám to dává smysl
  • 19. Tools - Google Lighthouse (audit stránky) - performance - pristupnost - https://www.thinkwithgoogle.com/feature/mobile/ - Porovnání rychlosti reálných uživatelů sbírané z Google Chrome - Dobrý na porovnání vaší služby vs. konkurence
  • 20.
  • 21. Hledáme nové kolegy do Prahy i Liberce

Hinweis der Redaktion

  1. Pingdom RUM - Real User Metrics
  2. Pingdom RUM - Real User Metrics
  3. dns-prefetch -> DNS lookup preconnect -> TCP handshake, and optional TLS negotiation
  4. odkaz na mobilni apky