CodeReady
Quay lại danh sách case study

Xử lý sự cố render chậm do danh sách dữ liệu khổng lồ

Tối ưu hóa bảng dữ liệu hiển thị hàng chục ngàn dòng mà không bị đơ giao diện.

Bối cảnh

Dự án dashboard tài chính hiển thị bảng dữ liệu thời gian thực với hơn 20.000 dòng và 15 cột liên tục cập nhật qua WebSocket, khiến trình duyệt bị treo cứng.

Vấn đề cần xử lý

DOM phải gánh quá nhiều phần tử HTML cùng lúc, kết hợp với việc state cập nhật liên tục làm React re-render toàn bộ bảng.

Hướng xử lý đề xuất

Áp dụng kỹ thuật ảo hóa danh sách (virtualization) bằng thư viện như react-virtualized hoặc tanstack virtual, chỉ render các dòng hiển thị trên màn hình kết hợp debounce tần suất cập nhật WebSocket.

Câu trả lời mẫu khi phỏng vấn

Khi đối mặt với bài toán này, tôi đã phân tích thấy gốc rễ là do DOM quá tải. Giải pháp tôi đưa ra là áp dụng ảo hóa danh sách để chỉ render những dòng trong vùng nhìn thấy của người dùng. Đồng thời, tôi gom nhóm các bản tin WebSocket lại bằng chiến lược debounce 100ms thay vì cập nhật ngay lập tức. Kết quả là hiệu năng tăng vọt, không còn hiện tượng giật lag.

Trade-off

Việc ảo hóa khiến việc tìm kiếm văn bản toàn cục bằng phím tắt Ctrl+F của trình duyệt không hoạt động trên toàn bộ dữ liệu, bù lại hiệu năng giao diện đạt mức hoàn hảo 60fps.

Kết quả kỳ vọng

Giảm thời gian tải ban đầu xuống 70% và duy trì mức sử dụng bộ ổn định, mang lại trải nghiệm mượt mà cho người dùng chuyên nghiệp.

Bài học khi trả lời phỏng vấn

Không bao giờ render trực tiếp tập dữ liệu lớn không giới hạn lên DOM; luôn phải tính đến phương án phân trang hoặc ảo hóa từ giai đoạn thiết kế kiến trúc.