hoc-lap-trinh-8

DOM Ảo là gì?

DOM ảo (Virtual DOM) là một khái niệm được sử dụng trong các thư viện JavaScript như React để cải thiện hiệu suất của việc cập nhật giao diện người dùng. Virtual DOM là một bản sao nhẹ của DOM thật (Real DOM) và tồn tại chỉ trong bộ nhớ.

Cách hoạt động của DOM Ảo

  1. Rendering ban đầu:
    • Khi một component React được render lần đầu tiên, React tạo ra một Virtual DOM, là một cây các đối tượng JavaScript đại diện cho cấu trúc của UI.
  2. Cập nhật Virtual DOM:
    • Khi trạng thái (state) hoặc props của component thay đổi, React cập nhật Virtual DOM thay vì cập nhật trực tiếp Real DOM.
  3. So sánh (Diffing):
    • React so sánh phiên bản mới của Virtual DOM với phiên bản trước đó để xác định các thay đổi (quá trình này gọi là “reconciliation”).
  4. Cập nhật Real DOM:
    • Sau khi xác định các thay đổi, React thực hiện các cập nhật cần thiết đối với Real DOM để đảm bảo rằng giao diện người dùng phản ánh đúng trạng thái hiện tại của ứng dụng.

So sánh DOM Ảo với DOM Thật

  1. Hiệu suất:
    • Virtual DOM: Nhanh hơn trong việc cập nhật. Bằng cách so sánh các thay đổi trong Virtual DOM trước khi thực hiện bất kỳ thay đổi nào trên Real DOM, React giảm thiểu số lượng các thao tác cập nhật tốn kém trên Real DOM.
    • Real DOM: Chậm hơn trong việc cập nhật. Bất kỳ thay đổi nào đối với Real DOM đều gây ra quá trình repaint (vẽ lại) và reflow (tính toán lại bố cục), điều này có thể làm chậm hiệu suất đặc biệt là khi có nhiều thay đổi cùng lúc.
  2. Khả năng quản lý thay đổi:
    • Virtual DOM: Quản lý các thay đổi một cách hiệu quả hơn nhờ vào quá trình diffing và reconciliation.
    • Real DOM: Cập nhật trực tiếp từng thay đổi mà không có bước so sánh trung gian, dẫn đến hiệu suất kém hơn.
  3. Bộ nhớ:
    • Virtual DOM: Tốn thêm bộ nhớ để lưu trữ bản sao của DOM thật, nhưng chi phí này thường là nhỏ so với lợi ích hiệu suất mà nó mang lại.
    • Real DOM: Không tốn thêm bộ nhớ ngoài việc lưu trữ cấu trúc DOM thực tế.

Trường hợp sử dụng DOM Ảo

DOM ảo được sử dụng trong các trường hợp cần tối ưu hóa hiệu suất của ứng dụng web, đặc biệt là khi ứng dụng phải thực hiện nhiều cập nhật giao diện người dùng. Một số tình huống cụ thể bao gồm:

  1. Ứng dụng động (Dynamic Applications):
    • Các ứng dụng có nhiều trạng thái thay đổi liên tục và cần cập nhật giao diện người dùng một cách nhanh chóng.
  2. Ứng dụng có cấu trúc phức tạp (Complex Applications):
    • Các ứng dụng với cấu trúc DOM phức tạp, nhiều thành phần con (nested components), và các tương tác phức tạp.
  3. Ứng dụng thời gian thực (Real-time Applications):
    • Các ứng dụng như chat, dashboard, hoặc các ứng dụng cần hiển thị dữ liệu theo thời gian thực.

Ví dụ minh họa

Để hiểu rõ hơn, dưới đây là một ví dụ minh họa về cách React sử dụng Virtual DOM để cập nhật giao diện:

import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

export default Counter;

Trong ví dụ trên:

  • Khi người dùng nhấn nút “Click me”, trạng thái count thay đổi.
  • React cập nhật Virtual DOM để phản ánh sự thay đổi này.
  • React so sánh Virtual DOM mới với phiên bản cũ để xác định rằng chỉ cần cập nhật nội dung của thẻ <p>You clicked {count} times </p>
  • Cuối cùng, React thực hiện cập nhật này trên Real DOM, giúp giảm thiểu số lượng các thao tác DOM tốn kém.

Kết luận

Virtual DOM là một công nghệ quan trọng giúp cải thiện hiệu suất của các ứng dụng web hiện đại bằng cách giảm thiểu số lượng các thao tác DOM tốn kém. So với Real DOM, Virtual DOM nhanh hơn và hiệu quả hơn trong việc quản lý các thay đổi giao diện người dùng. Việc sử dụng Virtual DOM là một phần quan trọng của các thư viện như React, giúp xây dựng các ứng dụng web phức tạp và động một cách hiệu quả.

By hoadv