
2023 Frontend Days

23. Feb 2023
FrontendPřináším vám druhou část tipů, jak optimalizovat SPA (single page apps) založené (nejen) na frameworku React. Pomoct zlepšit výkonnost a tím i skóre v benchmarkingových nástrojích. V tomhle dílu se podíváme na dynamické importy, odstraňování nepoužívaného kódu, refaktoring nebo Nginx Pagespeed.
Uvedené tipy jsme aplikovali na apku React vytvořenou pomocí CRA (Create React App), která používá webpack v4. CRA má předkonfigurováno několik technik
pro lepší výkonnost a rychlost aplikace. Pokud chcete upravit konfiguraci webpacku v CRA bez provedení příkazu eject, musíte použít knihovny,
například craco nebo customize-cra. Produkční build aplikace se zobrazuje pomocí webového serveru Nginx.
Stejně jako v první části, kde jsem se věnoval hlavně kompresi souborů, webovým fontům a CSS, jsem pro měření výkonnosti a rychlosti použil nástroje:
Ve výstupech z nástrojů najdete navrhovaná řešení, jak jednotlivé problémy odstranit.
ℹ Níže uvedené postupy nejsou jediné, a tedy pro některé z nich existuje alternativa k řešení reportovaných problémů z nástrojů.
Dynamické importování modulů umožňuje, aby byl příslušný soubor *.chunk.js
prohlížečem dotažen až ve chvíli, kdy je potřeba. Důsledkem toho je:
Webpack v4 podporuje dynamické importy s využitím SplitChunksPlugin. Také CRA podporuje code splitting. Importy lze pojmenovat, měnit strategii načítání, prioritizovat load aj. přes parametry zapsané jako komentáře.
Umožňuje pro routy lazy loading komponent, které se mají na dané route renderovat. Je možné je upravovat prostřednictvím parametrů přes zmíněné komentáře.
Příklad importu
K nalezení nepoužívaného kódu/assetů můžete použít např. nástroj deadfile.
Pro analýzu velikosti jednotlivých balíčků JS jsou k dispozici:
Podle výstupu zkuste zmenšit velké balíčky, např. reactjs, lodash, momentjs, chartjs... Pokud existuje vhodná alternativa (preact, lodash-es, just...) s menší velikostí → nahraďte ji. Pomoct může i způsob importu, kdy se namísto importu celého modulu importuje pouze požadovaná funkcionalita, např.:
⚠ Prioritou je zachování funkčnosti před menší velikostí balíčku! ⚠
Existuje několik knihoven, které pomáhají s lazy načítáním elementům, jako je <img>, <picture>, iframe, video, audio aj. Pomáhají taky s alokováním místa
v layoutu pro nerenderované elementy, s responzivností, dotahují obsah
do scroll kontejnerů podle potřeby atd. Jejich implementace je na uvážení vývojáře s ohledem na výkonnostní přínos pro aplikaci. V případě potřeby implementace z uvedených funkcionalit je možné použít:
Pro dosažení lepšího výsledku v auditovacích nástrojích je často nutný refaktoring samotné aplikace nebo její části. Problémová místa v aplikaci nejsnáze najde programátor, který aplikaci zná do hloubky. Při refaktoringu
a hledání problémových míst v aplikaci můžou pomoct následující odkazy:
PageSpeed je open-source serverový modul pro servery Nginx a Apache
od společnosti Google, který pomáhá optimalizovat web. Modul implementuje mnoho výkonnostních doporučení ze stránky Google PageSpeed Insights.
Zlepšuje latenci webových stránek tím, že mění zdroje na stránce tak,
aby odpovídaly osvědčeným postupům z hlediska výkonu webu.
Příklad konfigurace
/etc/nginx/pagespeed.conf
ℹℹKonfigurace byla nastavena na Docker image hitko/nginx-pagespeed s kompresí Brotli