7 Điểm nghẽn JavaScript Ẩn giấu và Cách khắc phục

Các ứng dụng web chậm hiếm khi thất bại do thuật toán kém. Chúng thất bại vì cách mã của bạn tương tác với trình duyệt.

Tôi đã phân tích hiệu năng của 300 ứng dụng thực tế. 73% các vấn đề về hiệu năng đến từ 7 nguồn sau đây.

  1. Layout thrashing Điều này xảy ra khi bạn đọc một thuộc tính, ghi vào DOM, rồi lại đọc tiếp. Việc này buộc trình duyệt phải tính toán lại bố cục liên tục.
  1. Unbounded event listeners Việc thêm một trình lắng nghe sự kiện mà không gỡ bỏ nó sẽ tạo ra rò rỉ bộ nhớ (memory leaks). Đây là một vấn đề lớn trong các ứng dụng đơn trang (single-page apps).
  1. Synchronous DOM reads in loops Việc đọc offsetWidth hoặc getBoundingClientRect bên trong một vòng lặp sẽ kích hoạt quá trình reflow liên tục.
  1. Missing requestAnimationFrame batching Các thay đổi DOM trực tiếp khi xảy ra sự kiện scroll hoặc resize diễn ra quá thường xuyên. Điều này gây ra hiện tượng giật lag (jank).
  1. Large JSON.parse payloads Việc phân tích (parsing) các tệp lớn sẽ chặn luồng chính (main thread). Điều này gây ra độ trễ đầu vào (input lag).
  1. Complex CSS selector matching Các selector lồng nhau sâu hoặc phức tạp sẽ làm chậm quá trình tính toán lại style.
  1. Duplicate bundle chunks Các bundle lớn và không được tối ưu hóa sẽ gây lãng phí thời gian truyền tải.

Cách đo lường tiến trình của bạn:

Khắc phục các vấn đề này sẽ cải thiện Core Web Vitals của bạn, cụ thể là Largest Contentful Paint và Interaction to Next Paint.

Nguồn: https://dev.to/kui_luo/how-to-find-and-fix-7-hidden-performance-bottlenecks-in-your-javascript-code-ek5