Quay lại danh sách case study
Tối ưu hiệu năng danh sách vô hạn (Infinite Scroll)
Xây dựng trải nghiệm cuộn trang mượt mà cho bảng dữ liệu lớn hàng chục ngàn dòng bằng kỹ thuật ảo hóa danh sách.
Bối cảnh
Ứng dụng dashboard hiển thị bảng dữ liệu tài chính với hơn 10.000 dòng. Việc render trực tiếp toàn bộ DOM node làm trình duyệt bị đơ cứng và giật lag.
Vấn đề cần xử lý
DOM quá lớn làm giảm frame rate, thời gian phản hồi sự kiện cuộn trang bị chậm.
Hướng xử lý đề xuất
Áp dụng kỹ thuật ảo hóa danh sách (Virtual List), chỉ render các item hiển thị trong vùng nhìn thấy của khung nhìn (viewport) và tái sử dụng DOM node.
Câu trả lời mẫu khi phỏng vấn
Để xử lý danh sách lớn hàng chục ngàn dòng mà không giật lag, em không render toàn bộ DOM mà áp dụng kỹ thuật virtualization. Em tính toán chiều cao của container, vị trí cuộn hiện tại để chỉ render những item nằm trong viewport cộng thêm một khoảng đệm nhỏ. Khi user cuộn, các phần tử khuất sẽ được tái sử dụng để hiển thị dữ liệu mới.
Trade-off
Code phức tạp hơn khi tính toán động chiều cao của các dòng có nội dung co giãn linh hoạt và khó hỗ trợ tính năng tìm kiếm toàn văn bản trong trình duyệt.
Kết quả kỳ vọng
Giảm số lượng DOM node từ 10.000 xuống chỉ còn khoảng 30-50 node, giữ FPS luôn ổn định ở mức 60.
Bài học khi trả lời phỏng vấn
Hiệu năng DOM là nút thắt cổ chai lớn nhất trong Frontend; kiểm soát số lượng DOM node là chìa khóa để ứng dụng mượt mà.