- vừa được xem lúc

Nâng cao hiệu suất ứng dụng React với Code Splitting

0 0 1

Người đăng: Vinh Phạm

Theo Viblo Asia

Khi ứng dụng React phát triển về kích thước và độ phức tạp, kích thước của các gói JavaScript có thể ảnh hưởng đáng kể đến hiệu suất, đặc biệt là trên các mạng hoặc thiết bị chậm. Một cách hiệu quả để giảm thiểu vấn đề này là thông qua code splitting, một kỹ thuật chia ứng dụng của bạn thành các phần nhỏ hơn.

Khi ứng dụng React phát triển về kích thước và độ phức tạp, kích thước của các gói JavaScript có thể ảnh hưởng đáng kể đến hiệu suất, đặc biệt là trên các mạng hoặc thiết bị chậm. Một cách hiệu quả để giảm thiểu vấn đề này là thông qua code splitting, một kỹ thuật chia ứng dụng thành các phần nhỏ hơn. Các phần này được tải theo yêu cầu, giảm thời gian tải ban đầu và cải thiện hiệu suất tổng thể.

Trong bài viết này, chúng ta sẽ khám phá code splitting là gì, tại sao nó quan trọng và cách triển khai nó một cách hiệu quả trong ứng dụng React.

Code Splitting là gì?

Code splitting là một chiến lược được sử dụng để chia mã JavaScript của bạn thành các gói nhỏ hơn có thể được tải động khi cần thiết. Thay vì cung cấp một tệp JavaScript lớn cho trình duyệt, code splitting cho phép bạn chỉ gửi các phần mã cần thiết ngay lập tức cho tương tác của người dùng. Điều này làm giảm thời gian tải ban đầu của ứng dụng. React sử dụng dynamic imports và các công cụ như Webpack để kích hoạt code splitting.

Lợi ích của Code Splitting

  • Giảm thời gian tải ban đầu: Chỉ mã quan trọng mới được tải lên trước.
  • Cải thiện hiệu suất: Các gói nhỏ hơn tải nhanh hơn, đặc biệt là trên các mạng chậm.
  • Sử dụng tài nguyên hiệu quả: Tài nguyên được tải khi cần thiết, giảm thiểu mã không sử dụng.
  • Trải nghiệm người dùng tốt hơn: Người dùng trải nghiệm tương tác nhanh hơn với ứng dụng của bạn.

Triển khai Code Splitting trong React

1. Sử dụng React.lazy và Suspense của React

React cung cấp React.lazy để tải các component một cách lười biếng (lazy load) và Suspense để hiển thị giao diện dự phòng trong khi các component được lazy load đang được tìm nạp. Dưới đây là một ví dụ:

Lazy Load một Component

import React, { Suspense } from 'react'; // Lazy load the component
const LazyLoadedComponent = React.lazy(() => import('./LazyLoadedComponent')); function App() { return ( <div> <h1>React Code Splitting Example</h1> <Suspense fallback={<div>Loading...</div>}> <LazyLoadedComponent /> </Suspense> </div> );
} export default App;

Giải thích: *React.lazy(() => import('./LazyLoadedComponent')): Tải động component chỉ khi cần thiết.

  • <Suspense fallback={<div>Loading...</div>}>: Hiển thị giao diện dự phòng (ví dụ: vòng quay tải) trong khi component đang được tải.

2. Code Splitting theo Route

Đối với các ứng dụng lớn hơn, việc chia mã theo route là một trong những cách hiệu quả nhất để cải thiện hiệu suất. Các thư viện như React Router giúp quá trình này trở nên liền mạch.

Bước 1: Cài đặt React Router

npm install react-router-dom

Bước 2: Triển khai Code Splitting với Routes

import React, { Suspense } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'; // Lazy load components for routes
const Home = React.lazy(() => import('./Home'));
const About = React.lazy(() => import('./About'));
const Contact = React.lazy(() => import('./Contact')); function App() { return ( <Router> <Suspense fallback={<div>Loading...</div>}> <Switch> <Route exact path="/" component={Home} /> <Route path="/about" component={About} /> <Route path="/contact" component={Contact} /> </Switch> </Suspense> </Router> );
} export default App;

Lợi ích:

  • Chỉ JavaScript cho route đang hoạt động mới được tải.
  • Giảm kích thước của gói ban đầu.

3. Sử dụng Dynamic Imports của Webpack

Nếu bạn đang sử dụng Webpack làm module bundler, nó hỗ trợ dynamic imports ngay lập tức. Webpack chia mã thành các chunk có thể được tải động. Dưới đây là cách sử dụng nó trong ứng dụng React:

Ví dụ:

function loadComponent() { import('./HeavyComponent') .then((module) => { const Component = module.default; // Use the component here }) .catch((error) => { console.error('Error loading the component:', error); });
}

Cách hoạt động:

  • Webpack tạo một chunk riêng cho HeavyComponent.
  • Chunk chỉ được tải khi loadComponent() được gọi.

4. Phân tích Bundle của bạn với Webpack Bundle Analyzer

Trước khi triển khai code splitting, điều cần thiết là phải hiểu những gì đang góp phần vào kích thước bundle của bạn. Webpack cung cấp một công cụ gọi là Bundle Analyzer để trực quan hóa nội dung của các bundle.

Bước 1: Cài đặt Webpack Bundle Analyzer

npm install --save-dev webpack-bundle-analyzer

Bước 2: Cấu hình Webpack

Thêm plugin vào cấu hình Webpack của bạn:

const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); module.exports = { plugins: [ new BundleAnalyzerPlugin(), ],
};

Bước 3: Phân tích Bundle của bạn

Chạy lệnh build để tạo báo cáo:

npm run build

Trình phân tích sẽ hiển thị một sơ đồ dạng cây cho thấy kích thước của mỗi module, giúp bạn xác định các cơ hội để tối ưu hóa.

5. Sử dụng Thư viện bên thứ ba với Code Splitting

Các thư viện bên thứ ba lớn (ví dụ: lodash, moment.js) có thể làm tăng kích thước bundle của bạn. Bạn có thể chia các thư viện này thành các chunk riêng biệt hoặc sử dụng tree-shaking để loại bỏ các phần không sử dụng của thư viện.

Ví dụ: Dynamic Import cho một Thư viện

import('lodash') .then((_) => { const uniq = _.uniq([1, 2, 2, 3]); console.log(uniq); }) .catch((error) => { console.error('Error loading lodash:', error); });

Ví dụ về Tree-Shaking:

Thay vì import toàn bộ thư viện:

import { uniq } from 'lodash';

Các phương pháp tốt nhất cho Code Splitting

  • Bắt đầu với Route-Based Splitting: Đây là cách dễ nhất và hiệu quả nhất để giảm thời gian tải ban đầu.
  • Tránh Over-Splitting: Quá nhiều chunk có thể dẫn đến quá nhiều yêu cầu HTTP.
  • Kết hợp Code Splitting với Lazy Loading: Chỉ tải những gì cần thiết cho tương tác của người dùng hiện tại.
  • Theo dõi Hiệu suất: Sử dụng các công cụ như Lighthouse để đo lường các cải tiến sau khi triển khai code splitting.
  • Sử dụng các Công cụ Build Hiện đại: Các công cụ như Webpack, Vite và Parcel cung cấp hỗ trợ tích hợp cho code splitting.

Kết luận

Code splitting là một kỹ thuật tối ưu hóa mạnh mẽ có thể cải thiện đáng kể hiệu suất của các ứng dụng React của bạn. Bằng cách chia ứng dụng của bạn thành các chunk nhỏ hơn và tải chúng theo yêu cầu, bạn có thể giảm thời gian tải ban đầu, cải thiện trải nghiệm người dùng và làm cho ứng dụng của bạn hiệu quả hơn. Hãy bắt đầu với route-based splitting và sau đó thử nghiệm với component-level hoặc library-level splitting để điều chỉnh việc tối ưu hóa cho nhu cầu của ứng dụng. Kết hợp code splitting với các kỹ thuật hiệu suất khác, như lazy loading và tree-shaking, để tối đa hóa hiệu quả của ứng dụng React.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tìm hiểu về Redux Thunk

Chào mọi người, nếu bạn là người đã biết về React và đang làm quen với Redux chắc hẳn bạn đang rất mơ hồ về các khái niệm cơ bản của Redux như dispatch, store, action creator,... bạn còn đang vật lộn với đống document của Redux để hiểu những khái niệm đó và bạn nghe ai đó trong team nói về Redux Thu

0 0 399

- vừa được xem lúc

[React] Giới thiệu tổng quát về Redux Toolkit

1. Redux Toolkit (RTK) là gì và tại sao lại có nó. . .

0 0 6.6k

- vừa được xem lúc

Uống Pepsi code Vue đi - Uống Cocacola code React nha ;)

. (Nguồn ảnh: Internet). Chào các bạn, chào các bạn. Let's go . 1.

0 0 146

- vừa được xem lúc

Cài đặt taillwind css cho dự án React

Trong bài viết cùng mình tìm hiểu cách cài đặt tailwind css cho một dự án React sẵn có. .

0 0 146

- vừa được xem lúc

Formik vs React Hook Form (Phần 1)

Các lập trình viên Front End đều làm việc rất nhiều với form cùng sự phức tạp của ứng dụng. Do vậy chúng ta cần những thư viện form mạnh mẽ hỗ trợ quản lý các form state, form validation... Thành phần module. Formik bao gồm có 9 dependencies khác. . React Hook Form thì không có.

0 0 371

- vừa được xem lúc

Hướng dẫn React Redux cho người mới bắt đầu - Phần 1

Lời mởi đầu. Chào các bạn, ở thời điểm thực hiện bài viết này mình cũng là một người đang bắt đầu tìm hiểu và học với ReactJs và Redux, trong quá trình tìm hiểu đọc các tài liệu về thư viện này mình có tìm được một bài hướng dẫn khá hay nên đã quyết định chia sẻ với mọi người .

0 0 280