React là một thư viện JavaScript phổ biến trong việc xây dựng giao diện người dùng. Tuy nhiên, nếu không tối ưu đúng cách, hiệu suất ứng dụng có thể giảm sút đáng kể khi dự án mở rộng. Dưới đây là 7 mẹo đơn giản nhưng cực kỳ hiệu quả giúp bạn cải thiện tốc độ và hiệu năng trong các ứng dụng React.
1. Code Splitting – Tách mã theo nhu cầu
Vấn đề: React thường tạo ra một bundle lớn, khiến người dùng phải tải cả ứng dụng dù chỉ cần một phần nhỏ.
Giải pháp: Sử dụng React.lazy
và Suspense
để tải component theo yêu cầu:
import React, { Suspense } from 'react';
const Dashboard = React.lazy(() => import('./Dashboard'));
function App() {
return (
<Suspense fallback={<div>Đang tải...</div>}>
<Dashboard />
</Suspense>
);
}
2. Lazy load hình ảnh và component không cần thiết
Vấn đề: Ứng dụng tải toàn bộ hình ảnh/component kể cả khi chưa hiển thị.
Giải pháp: Dùng react-intersection-observer
để lazy load hình ảnh:
import { useInView } from 'react-intersection-observer';
const LazyImage = ({ src, alt }) => {
const { ref, inView } = useInView({ triggerOnce: true });
return (
<div ref={ref}>
{inView ? <img src={src} alt={alt} /> : <div>Đang tải ảnh...</div>}
</div>
);
};
3. Giảm kích thước bundle với Tree Shaking
Vấn đề: Bundle chứa cả những đoạn mã không dùng đến.
Giải pháp:
- Tránh import toàn bộ thư viện, ví dụ thay vì
import _ from 'lodash'
hãy dùnglodash-es
hoặc chỉ import hàm cần dùng. - Sử dụng Webpack hoặc Vite có hỗ trợ tree shaking.
4. Memo hóa component và hàm
Vấn đề: Component bị render lại không cần thiết dù props không thay đổi.
Giải pháp: Sử dụng React.memo
, useMemo
và useCallback
đúng cách:
const ExpensiveComponent = React.memo(({ data }) => {
// Chỉ render lại khi `data` thay đổi
});
5. Tối ưu gọi API và xử lý dữ liệu
- Sử dụng pagination hoặc infinite scroll thay vì tải toàn bộ dữ liệu.
- Cache dữ liệu với
React Query
hoặcSWR
. - Tránh xử lý dữ liệu nặng trong render, nên dùng
useMemo
.
6. Phân tích hiệu năng với các công cụ hỗ trợ
Sử dụng các công cụ sau để theo dõi và tối ưu hiệu suất:
- Lighthouse trong Chrome DevTools
- React DevTools Profiler
- Web Vitals như FCP, LCP, CLS,…
7. Dùng SSR hoặc SSG khi cần thiết
Với những dự án React sử dụng Next.js, bạn nên tận dụng tính năng Server-Side Rendering (SSR) hoặc Static Site Generation (SSG) để cải thiện tốc độ tải trang và SEO.
Kết luận: Tối ưu React không quá khó nếu bạn áp dụng đúng kỹ thuật. Hy vọng 7 mẹo trên sẽ giúp ứng dụng của bạn nhanh hơn, mượt hơn và mang lại trải nghiệm tốt hơn cho người dùng.