Дізнайтеся, як впровадити відкладене завантаження в React з розділенням коду для покращення продуктивності, UX та часу початкового завантаження додатку.
Відкладене завантаження в React: підвищення продуктивності за допомогою розділення коду компонентів
У сучасному світі веброзробки продуктивність має першочергове значення. Користувачі очікують швидкого завантаження та плавної взаємодії. Великі бандли JavaScript, особливо у складних додатках на React, можуть значно впливати на початковий час завантаження та загальний користувацький досвід. Однією з потужних технік для вирішення цієї проблеми є відкладене завантаження, а саме — розділення коду компонентів. Ця стаття надає вичерпний посібник з розуміння та впровадження відкладеного завантаження в React за допомогою React.lazy
та Suspense
.
Що таке відкладене завантаження та розділення коду?
Відкладене завантаження, також відоме як завантаження на вимогу, — це техніка, яка відкладає завантаження ресурсів (у нашому випадку, компонентів React) доти, доки вони не стануть дійсно потрібними. Замість того, щоб завантажувати весь код додатку одразу, спочатку завантажуються лише основні частини, а решта коду завантажується асинхронно, коли користувач переходить на певний маршрут або взаємодіє з конкретним компонентом. Це значно зменшує початковий розмір бандла та покращує час до інтерактивності (TTI).
Розділення коду — це процес поділу коду вашого додатку на менші, керовані частини (бандли). Ці бандли потім можна завантажувати незалежно та на вимогу. Відкладене завантаження в React використовує розділення коду для завантаження компонентів лише тоді, коли вони потрібні.
Переваги відкладеного завантаження та розділення коду
- Покращений час початкового завантаження: Зменшуючи початковий розмір бандла, браузер завантажує та аналізує менше JavaScript, що призводить до швидшого завантаження сторінки. Це особливо важливо для користувачів з повільним інтернет-з'єднанням або на слабких пристроях.
- Покращений користувацький досвід: Швидше завантаження забезпечує більш чуйний та приємний користувацький досвід, зменшуючи показник відмов та збільшуючи залученість користувачів.
- Зменшене споживання ресурсів: Завантаження лише необхідного коду зменшує використання пам'яті додатком, що особливо корисно для мобільних пристроїв.
- Краще SEO: Пошукові системи віддають перевагу вебсайтам зі швидким завантаженням, що потенційно може покращити рейтинг вашого сайту в пошуковій видачі.
Впровадження відкладеного завантаження в React за допомогою React.lazy
та Suspense
React надає вбудований механізм для відкладеного завантаження компонентів за допомогою React.lazy
та Suspense
. React.lazy
дозволяє динамічно імпортувати компонент, тоді як Suspense
надає спосіб відображати резервний інтерфейс (fallback UI) під час завантаження компонента.
Крок 1: Динамічні імпорти з React.lazy
React.lazy
приймає функцію, яка викликає import()
. Функція import()
є динамічним імпортом, що повертає Promise, який вирішується в модуль, що містить компонент, який ви хочете завантажити відкладено.
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
У цьому прикладі MyComponent
не завантажується, доки не буде відрендерений. Вираз import('./MyComponent')
динамічно імпортує компонент із файлу ./MyComponent
. Зауважте, що шлях є відносним до поточного файлу.
Крок 2: Використання Suspense
для обробки станів завантаження
Оскільки відкладене завантаження включає асинхронне завантаження компонентів, вам потрібен спосіб обробляти стан завантаження та відображати резервний інтерфейс, поки компонент завантажується. Саме для цього існує Suspense
. Suspense
— це компонент React, який дозволяє "призупинити" рендеринг своїх дочірніх елементів, доки вони не будуть готові. Він приймає пропс fallback
, який вказує, який інтерфейс рендерити під час завантаження дочірніх елементів.
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
function App() {
return (
Завантаження...
У цьому прикладі компонент Suspense
обгортає MyComponent
. Поки MyComponent
завантажується, буде відрендерено пропс fallback
(
). Як тільки MyComponent
завантажиться, він замінить резервний інтерфейс.
Приклад: відкладене завантаження маршруту в додатку React Router
Відкладене завантаження особливо корисне для маршрутів у додатку React Router. Ви можете відкладено завантажувати цілі сторінки або розділи вашого додатку, покращуючи початковий час завантаження вашого вебсайту.
import React, { lazy, Suspense } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const Home = lazy(() => import('./pages/Home'));
const About = lazy(() => import('./pages/About'));
const Contact = lazy(() => import('./pages/Contact'));
function App() {
return (
Завантаження...