1
Výkonnost webu
s moderními frameworky
Lukáš Trumm
Frontend architekt v Quanti
sdf
2
No notes for this slide
3
No notes for this slide
4
No notes for this slide
5
An unexpected error occured, sorry.
No notes for this slide
6
Proč?
No notes for this slide
7
Proč?
- Je to složitý!
- Proč je web pomalý?
- hodně JavaScriptu
- komplexita vývoje
- Proč to řešit?
- abychom nemuseli čekat
- aby se lidi vůbec dostali k tomu,
co potřebují
- Proč stále vznikají nové frameworky?
- vývojáři to chtějí mít dokonalé a nikdo
to nechce staré - jeden jazyk pro vývoj na serveru i v prohlížečích
- vývojáři to chtějí mít dokonalé a nikdo
10
0
1
2
3
4
5
6
7
8
9
10
No notes for this slide
8
Výkonnost webu
- Čas do prvního načtení stránky
- Svižnost přechodu mezi stránkami
- Rychlost reakce na kliknutí
- Plynulost skrolování
- Poskakování stránky během načítání
- Konverze
- Umístění ve vyhledávačích
- Nároky na hardware
- …
1
0
1
No notes for this slide
9
Moderní meta-frameworky
| React | → Next |
| Vue | → Nuxt |
| Angular | → Analog |
| Svelte | → SvelteKit |
| Solid | → SolidStart |
| Qwik | → QwikCity |
| Laravel Phoenix Blazor … |
2
0
1
2
No notes for this slide
10
Měření výkonnosti
- Lighthouse – v prohlížeči
- WebPageTest – reálná zařízení po světě
- Page Speed Insights – Google data z Chromu
Lighthouse

No notes for this slide
11
Page Speed Insights (RUM data, 75. percentil)

No notes for this slide
16
Interaction to Next Paint (INP)
& First Input Delay (FID)
Příklad: V baru – čekání na objednaný drink
- FID: čas do začátku přípravy prvního drinku
- ale limonáda se připravuje rychleji než koktejl
- INP: čas na přípravu samotnou všech drinků po dobu návštěvy baru
Zdroj: Harry Roberts
No notes for this slide
17
No notes for this slide
18
Specifika JavaScriptových frameworků
- velká míra kontroly nad chováním v prohlížeči = příliš mnoho možností
- každých pár měsíců nebo let změna
- příliš snadné přidat mnoho nepotřebných závislostí
3
0
1
2
3
No notes for this slide
20
Zrychlení načítání JS aplikací a webů
- redukce množství JavaScriptu
- využít code splitting a lazy loading
- omezit použití externích knihoven
- izolovat skripty třetích stran
- zkoumat Islands of (non)interactivity a další techniky
- redukce množství dat
- typ renderování HTML
- použití CDNky
- optimalizace obrázků a fontů
- vhodný efekt při načítání dat
- …
<LazyReviewsComponent />- ReviewsComponent.vue
- NonInterativeComponent.server.vue
- BrowserOnlyComponent.client.vueexport default defineCachedEventHandler(
async (event) => {
const urls = [
/* some urls */
]
return Promise.all(
urls.map(
/* several expensive requests */
(url) => fetch(url).then((r) => r.json()),
/* error handling etc. */
),
)
},
{ maxAge: 300 },
)<NuxtImg src="/photo.jpg" />11
0
1
2
3
4
5
6
7
8
9
10
11
- redukce použití JavaScriptu - lze použít BE framework, nebo zkusit nový Qwik
- noviny: above the fold, code splitting
21
No notes for this slide
22
Shrnutí
- měř
- omez JavaScript v prohlížeči
- zvol framework uvážlivě
- drž složitost na uzdě
No notes for this slide
24
No notes for this slide





