1
Výkonnost webu
s Nuxt frameworkem a jemu podobnými
Lukáš Trumm
Quanti
No notes for this slide
2
Oťukávačka
- Víš co jsou Core Web Vitals?
- Víš co je hydratace (v kontextu webových frameworků)?
No notes for this slide
3
Proč?
- Je to složitý!
- Proč je web pomalý? Milion důvodů…
- 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
4
Výkonnost webu
- Čas do prvního načtení stránky (TTFB, FCP, LCP)
- Svižnost přechodu mezi stránkami (SPA)
- Rychlost reakce na kliknutí (FID, INP)
- Plynulost skrolování (Scroll-driven animations API)
- Poskakování stránky během načítání (LCP)
- Konverze
- Umístění ve vyhledávačích
- Nároky na hardware
- …
1
0
1
No notes for this slide
5
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
6
Měření výkonnosti
- Lighthouse – Synthetic monitoring (v prohlížeči, CI nebo cli)
- WebPageTest – reálná zařízení po světě
- Page Speed Insights – Google data z Chromu
- Vlastní měření (např. Newrelic, Sentry, …) – Real User Monitoring
Lighthouse

No notes for this slide
11
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
12
No notes for this slide
13
Page Speed Insights (RUM data, 75. percentil)

No notes for this slide
14
Newrelic - příklad 1

No notes for this slide
15
Newrelic - příklad 2

No notes for this slide
16
Měření výkonnosti – shrnutí
- Syntetické měření během vývoje, kontrola chyb (podobně jako linting)
- RUM během provozu
- Vybrat jen některé metriky (Google udělal za nás: Core Web Vitals)
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
Zrychlujeme (nezpomalujeme)
Takový metaframework už za nás dělá řadu věcí…
- Route/component based code splitting
- Code minification
- File name hashing for long-term caching
- CSS inlining
- Less transpilation for modern browsers
- Tree shaking
- Prefetching
- Image/Picture component
No notes for this slide
21
Zrychlujeme - redukce množství JavaScriptu 1
- využít code splitting a lazy loading (Nuxt docs)
<LazyReviewsComponent />const lazyDependency = await import("./lazy-loaded-code.js")- lazy hydration (nuxt-lazy-hydrate module)
<LazyHydrationWrapper :when-visible="{ rootMargin: '50px' }">
<!-- content -->
</LazyHydrationWrapper>No notes for this slide
22
Zrychlujeme - redukce množství JavaScriptu 2
- Islands of (non)interactivity (Nuxt docs)
- ReviewsComponent.vue
- NonInterativeComponent.server.vue
- BrowserOnlyComponent.client.vue- omezit použití externích knihoven
- izolovat skripty třetích stran
- omezit množství globálních skriptů (např. Nuxt plugins)
No notes for this slide
23
Zrychlujeme - redukce množství JavaScriptu 3
- přesun kódu na server (Nuxt server API routes, middlewares)
- redukce množství dat (overfetching)
export 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 },
)No notes for this slide
24
No notes for this slide
25
Zrychlujeme - obrázky a fonty
- optimalizace obrázků (nuxt/image) a fontů (nuxt/fonts)
Příklad NuxtImg s CMS Storyblok
<NuxtImg
width="200"
format="webp"
provider="storyblok"
src="https://a.storyblok.com/f/39898/3310x2192/e4ec08624e/demo-image.jpeg"
/>No notes for this slide
26
Zrychlujeme - zdánlivě
- vhodný efekt při načítání dat
No notes for this slide
27
Shrnutí
- trpělivost, je to spousta malých kroků, ne jedna výhra
- řeš hned od začátku
- měř
- omez JavaScript v prohlížeči
- zvol framework uvážlivě
- drž složitost na uzdě
No notes for this slide
28
Otázky?
No notes for this slide
29
No notes for this slide




