Lazy Loading — это паттерн производительности, при котором ресурсы (компоненты, модули, изображения) загружаются только тогда, когда они действительно нужны, а не все сразу при первоначальной загрузке приложения.
Стандартный способ с использованием React.lazy:
import { lazy, Suspense } from 'react';
const LazyComponent = lazy(() => import('./LazyComponent'));
function App() {
return (
<Suspense fallback={<div>Загрузка...</div>}>
<LazyComponent />
</Suspense>
);
}
Чаще всего используется в связке с React Router:
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
const Home = lazy(() => import('./pages/Home'));
const About = lazy(() => import('./pages/About'));
function App() {
return (
<Router>
<Suspense fallback={<GlobalLoader />}>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Suspense>
</Router>
);
}
Для тяжелых сторонних библиотек:
const loadLibrary = () => import('heavy-library');
function Component() {
const handleClick = async () => {
const library = await loadLibrary();
library.doSomething();
};
return <button onClick={handleClick}>Загрузить и использовать</button>;
}
Современный браузерный способ:
<img
src="placeholder.jpg"
data-src="real-image.jpg"
loading="lazy"
alt="Пример"
onLoad={e => {
e.target.src = e.target.dataset.src;
}}
/>
// При наведении на кнопку или при прогнозируемом действии
function handleMouseEnter() {
import('./LazyComponent');
}
const UserProfile = lazy(() => import(
/* webpackChunkName: "user-profile" */
'./UserProfile'
));
const UserSettings = lazy(() => import(
/* webpackChunkName: "user-profile" */
'./UserSettings'
));
С помощью webpack magic comments:
const ChatWidget = lazy(() => import(
/* webpackChunkName: "chat-widget" */
/* webpackPrefetch: true */
'./ChatWidget'
));
import { useState, lazy, Suspense } from 'react';
const LazyModal = lazy(() => import('./LazyModal'));
function App() {
const [showModal, setShowModal] = useState(false);
return (
<div>
<button onClick={() => setShowModal(true)}>
Показать модальное окно
</button>
{showModal && (
<Suspense fallback={<div>Загружаем модалку...</div>}>
<LazyModal onClose={() => setShowModal(false)} />
</Suspense>
)}
</div>
);
}
Lazy Loading в React — это мощный инструмент оптимизации, который реализуется через:
React.lazy()
для загрузки компонентовSuspense
для обработки состояний загрузкиИспользуйте ленивую загрузку для:
Помните о необходимости: