SlideShare une entreprise Scribd logo
1  sur  52
Télécharger pour lire hors ligne
Core Web Vitals
w aplikacji Next.JS
Marcin Kurka
#52: Opowieści z frontu
Uszanowanko Programowanko
Marcin Kurka
marcin.kurka@tsh.io
Frontend developer @ TSH
O mnie
Na czym
będziemy
pracować?
Od czego
zaczynaliśmy?
Co udało się
osiągnąć?
6
#52: Opowieści z frontu
Uszanowanko Programowanko
Zaczynajmy!
Core Web Vitals
Core Web Vitals
FCP (First
Contentful
Paint)
10%
SI (Speed
Index)
10%
LCP (Largest
Contentful
Paint)
25%
TTI (Time To
Interactive)
10%
TBT (Total
Blocking
Time)
30%
CLS
(Cumulative
Layout Shift)
15%
Core Web Vitals
FCP (First
Contentful
Paint)
10%
SI (Speed
Index)
10%
LCP (Largest
Contentful
Paint)
25%
TTI (Time To
Interactive)
10%
TBT (Total
Blocking
Time)
30%
CLS
(Cumulative
Layout Shift)
15%
Core Web Vitals
FCP (First
Contentful
Paint)
10%
SI (Speed
Index)
10%
LCP (Largest
Contentful
Paint)
25%
TTI (Time To
Interactive)
10%
TBT (Total
Blocking
Time)
30%
CLS
(Cumulative
Layout Shift)
15%
Core Web Vitals
FCP (First
Contentful
Paint)
10%
SI (Speed
Index)
10%
LCP (Largest
Contentful
Paint)
25%
TTI (Time To
Interactive)
10%
TBT (Total
Blocking
Time)
30%
CLS
(Cumulative
Layout Shift)
15%
Core Web Vitals
FCP (First
Contentful
Paint)
10%
SI (Speed
Index)
10%
LCP (Largest
Contentful
Paint)
25%
TTI (Time To
Interactive)
10%
TBT (Total
Blocking
Time)
30%
CLS
(Cumulative
Layout Shift)
15%
Core Web Vitals
FCP (First
Contentful
Paint)
10%
SI (Speed
Index)
10%
LCP (Largest
Contentful
Paint)
25%
TTI (Time To
Interactive)
10%
TBT (Total
Blocking
Time)
30%
CLS
(Cumulative
Layout Shift)
15%
14
Fonty
#52: Opowieści z frontu
Uszanowanko Programowanko
Fonty 600
300
250
180
0
100
200
300
400
500
600
700
TTF WOFF EOT WOFF2
Waga
w
kilobajtach
Font
Fonty 600
300
250
180
150
70 65
40
0
100
200
300
400
500
600
700
TTF WOFF EOT WOFF2
Waga
w
kilobajtach
Font Font subset
Fonty
Fonty
Fonty
Fonty
5400
2700
2250
1620
130
1350
630 585
360
0
1 000
2 000
3 000
4 000
5 000
6 000
TTF WOFF EOT WOFF2 Variable Font
Waga
w
kilobajtach
Font Font subset
21
Bundles
#52: Opowieści z frontu
Uszanowanko Programowanko
Bundles
Bundle-wizard
Bundles
Rozbijanie chunków
Bundles
Bundle-wizard
Bundles
Lodash
72kb -> 18kb
27
#52: Opowieści z frontu
Uszanowanko Programowanko
Zbiorowe
przesunięcie
treści - CLS
CLS
29
Rozmiar
DOM
#52: Opowieści z frontu
Uszanowanko Programowanko
Rozmiar
DOM
› Optymalizacja list
› Code-splitting
31
Obrazki
#52: Opowieści z frontu
Uszanowanko Programowanko
Obrazki Rozszerzenia nowej generacji
WebP, JPEG 2000
1
Jak optymalizować obrazki?
Obrazki 1
Warianty rozmiarów obrazków
Serwowanie mniejszych obrazków na niższych
rozdzielczościach
2
Jak optymalizować obrazki?
Rozszerzenia nowej generacji
WebP, JPEG 2000
Obrazki 1
„Lazy loading”
Doładowywanie obrazków poza viewportem
3
Warianty rozmiarów obrazków
Serwowanie mniejszych obrazków na niższych
rozdzielczościach
2
Jak optymalizować obrazki?
Rozszerzenia nowej generacji
WebP, JPEG 2000
Obrazki 1
„Lazy loading”
Doładowywanie obrazków poza viewportem
3
Warianty rozmiarów obrazków
Serwowanie mniejszych obrazków na niższych
rozdzielczościach
2
4
Preload LCP
Preload największego obrazka
Jak optymalizować obrazki?
Rozszerzenia nowej generacji
WebP, JPEG 2000
1500
25
2000
30
0
500
1000
1500
2000
2500
Oryginał Next/image
Waga
w
kilobajtach
Hero image Miniaturki
Next/image
Obrazki
37
#52: Opowieści z frontu
Uszanowanko Programowanko
Przenoszenie
złożoności na
serwer
Przenoszenie złożoności na serwer
API routes
Przenoszenie złożoności na serwer
API routes
Przenoszenie złożoności na serwer
API routes
Przenoszenie złożoności na serwer
API routes
Przenoszenie złożoności na serwer
API routes
43
#52: Opowieści z frontu
Uszanowanko Programowanko
Podsumowanie
wyników
0,6
2,3
3,9 3,9
0,56
0,234
0,3 0,3
0,5
1,1
0,08 0
0
1
2
3
4
5
FCP SI LCP TTI TBT CLS
Przed Po
Podsumowanie
wyników
2,9
9,5
19,2
18
1,28 0,464
0,9 0,9
2,5
6,8
0,65 0
0
5
10
15
20
25
FCP SI LCP TTI TBT CLS
Przed Po
Desktop
Mobile
Następne kroki
› Css-modules zamiast CSS-in-JS
https://pustelto.com/blog/css-vs-css-in-js-perf/
› React server-side components
https://vercel.com/blog/everything-about-react-
server-components
Jak utrzymać Core Web
Vitals na niskim poziomie?
Bundle-wizard
https://github.com/aholachek/
bundle-wizard
Jak utrzymać Core Web
Vitals na niskim poziomie?
Webpack performance hints
https://webpack.js.org/
configuration/performance/
Jak utrzymać Core Web
Vitals na niskim poziomie?
WebPageTest
https://webpagetest.org/
Jak utrzymać Core Web
Vitals na niskim poziomie?
Lighthouse-CI
https://github.com/GoogleChrome/
lighthouse-ci
Jak utrzymać Core Web
Vitals na niskim poziomie?
Performance prawdziwych
użytkowników
https://docs.sentry.io/platforms/javas
cript/guides/nextjs/performance/
Arkusz z wynikami
https://1drv.ms/x/s!Al1weAR_KBdlgTy3KLT
mePXWAtnL?e=hM7gjR
lub
https://bit.ly/3wT7ASg
Dziękuję za uwagę!
Czas na Q&A
Marcin Kurka
#52: Opowieści z frontu
Uszanowanko Programowanko

Contenu connexe

Tendances

Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z Capistrano
Michał Szajbe
 

Tendances (20)

Szybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic BeanstalkSzybkie stawianie aplikacji z Elastic Beanstalk
Szybkie stawianie aplikacji z Elastic Beanstalk
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019Kubernetes - 0 do 1 - 4Developers Warszawa 2019
Kubernetes - 0 do 1 - 4Developers Warszawa 2019
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
Dystrybucja gier w świecie online, przykład architektury webowego systemu ro...
 
Wykorzystanie technologii webowych w aplikacjach desktopowych (1)
Wykorzystanie technologii webowych w aplikacjach desktopowych  (1)Wykorzystanie technologii webowych w aplikacjach desktopowych  (1)
Wykorzystanie technologii webowych w aplikacjach desktopowych (1)
 
Lokalny development z kubernetes
Lokalny development z kubernetesLokalny development z kubernetes
Lokalny development z kubernetes
 
DynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychDynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornych
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/Redux
 
GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...
GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...
GWINT: Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej...
 
Laravel 8.0 - co nowego?
Laravel 8.0 - co nowego?Laravel 8.0 - co nowego?
Laravel 8.0 - co nowego?
 
Jak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com ITJak wydaliśmy wiedźmina, GOG.com IT
Jak wydaliśmy wiedźmina, GOG.com IT
 
Przetwarzanie Asynchroniczne i Promises w Laravel
Przetwarzanie Asynchroniczne i Promises w LaravelPrzetwarzanie Asynchroniczne i Promises w Laravel
Przetwarzanie Asynchroniczne i Promises w Laravel
 
Deployment kodu z Capistrano
Deployment kodu z CapistranoDeployment kodu z Capistrano
Deployment kodu z Capistrano
 
Środowisko PWA
Środowisko PWAŚrodowisko PWA
Środowisko PWA
 
Infrastructure As Code
Infrastructure As CodeInfrastructure As Code
Infrastructure As Code
 
Rundeck & Ansible
Rundeck & AnsibleRundeck & Ansible
Rundeck & Ansible
 
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...
 
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
 
The story of GOG.com Cache
The story of GOG.com Cache The story of GOG.com Cache
The story of GOG.com Cache
 

Similaire à Jak poprawić Core Web Vitals w aplikacji Next.js

Silverlight z bliska i na wylot
Silverlight z bliska i na wylotSilverlight z bliska i na wylot
Silverlight z bliska i na wylot
Michal Zylinski
 
Optymalizacja hostingu
Optymalizacja hostinguOptymalizacja hostingu
Optymalizacja hostingu
Divante
 
Noc informatyka
Noc informatykaNoc informatyka
Noc informatyka
OnetIT
 

Similaire à Jak poprawić Core Web Vitals w aplikacji Next.js (20)

Silverlight z bliska i na wylot
Silverlight z bliska i na wylotSilverlight z bliska i na wylot
Silverlight z bliska i na wylot
 
Usuwanie zbędnych grafik na stronie WordPress z wtyczką Media Cleaner
Usuwanie zbędnych grafik na stronie WordPress z wtyczką Media CleanerUsuwanie zbędnych grafik na stronie WordPress z wtyczką Media Cleaner
Usuwanie zbędnych grafik na stronie WordPress z wtyczką Media Cleaner
 
WordCamp 2016 Najdłuższe wdrożenie świata
WordCamp 2016 Najdłuższe wdrożenie świataWordCamp 2016 Najdłuższe wdrożenie świata
WordCamp 2016 Najdłuższe wdrożenie świata
 
Optymalizacja frontendu w 2022
Optymalizacja frontendu w 2022Optymalizacja frontendu w 2022
Optymalizacja frontendu w 2022
 
Feo w-joomla
Feo w-joomlaFeo w-joomla
Feo w-joomla
 
Perfomance w Joomla - Jak przyspieszyć działanie strony?
Perfomance w Joomla - Jak przyspieszyć działanie strony?Perfomance w Joomla - Jak przyspieszyć działanie strony?
Perfomance w Joomla - Jak przyspieszyć działanie strony?
 
PLNOG 3: Tomasz Paszkowski Wysokowydajny system składowania plików graficzny...
PLNOG 3: Tomasz Paszkowski  Wysokowydajny system składowania plików graficzny...PLNOG 3: Tomasz Paszkowski  Wysokowydajny system składowania plików graficzny...
PLNOG 3: Tomasz Paszkowski Wysokowydajny system składowania plików graficzny...
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Zarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danychZarządzanie zmianami w schemacie relacyjnych baz danych
Zarządzanie zmianami w schemacie relacyjnych baz danych
 
Activiti - BPMN 2.0 nadchodzi
Activiti - BPMN 2.0 nadchodziActiviti - BPMN 2.0 nadchodzi
Activiti - BPMN 2.0 nadchodzi
 
Wdrażanie na wulkanie, czyli CI w świecie który nie znosi opóźnień.
Wdrażanie na wulkanie, czyli CI w świecie który nie znosi opóźnień.Wdrażanie na wulkanie, czyli CI w świecie który nie znosi opóźnień.
Wdrażanie na wulkanie, czyli CI w świecie który nie znosi opóźnień.
 
Wstęp do UNet
Wstęp do UNet Wstęp do UNet
Wstęp do UNet
 
PLNOG 17 - Konrad Kulikowski - Cisco WAE - Wan Automation Engine - Co SDN moż...
PLNOG 17 - Konrad Kulikowski - Cisco WAE - Wan Automation Engine - Co SDN moż...PLNOG 17 - Konrad Kulikowski - Cisco WAE - Wan Automation Engine - Co SDN moż...
PLNOG 17 - Konrad Kulikowski - Cisco WAE - Wan Automation Engine - Co SDN moż...
 
Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
[QE 2017] Piotr Marczydło - Wdrażanie na wulkanie, czyli CI w świecie, który ...
[QE 2017] Piotr Marczydło - Wdrażanie na wulkanie, czyli CI w świecie, który ...[QE 2017] Piotr Marczydło - Wdrażanie na wulkanie, czyli CI w świecie, który ...
[QE 2017] Piotr Marczydło - Wdrażanie na wulkanie, czyli CI w świecie, który ...
 
Optymalizacja hostingu
Optymalizacja hostinguOptymalizacja hostingu
Optymalizacja hostingu
 
university day 1
university day 1university day 1
university day 1
 
Wszystko o Laravel Livewire
Wszystko o Laravel Livewire Wszystko o Laravel Livewire
Wszystko o Laravel Livewire
 
Jaki framework wybrać
Jaki framework wybraćJaki framework wybrać
Jaki framework wybrać
 
Noc informatyka
Noc informatykaNoc informatyka
Noc informatyka
 

Plus de The Software House

Plus de The Software House (20)

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
 
Uszanowanko Podsumowanko
Uszanowanko PodsumowankoUszanowanko Podsumowanko
Uszanowanko Podsumowanko
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon Chime
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScript
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScript
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danych
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case study
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny Krzemowej
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzach
 
Jak poskromić AWS?
Jak poskromić AWS?Jak poskromić AWS?
Jak poskromić AWS?
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.js
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurze
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
 

Jak poprawić Core Web Vitals w aplikacji Next.js