Tối ưu hiệu năng web

Tối ưu hiệu năng web hướng tới việc cải thiện các user-centric metric bằng hai nhóm biện pháp: giảm lượng JS mà browser phải thực thi (giảm main thread blocking) và rút ngắn thời gian load các blocking resource. Một nguyên tắc xuyên suốt là không lazy hoá những thành phần ảnh hưởng tới LCP và CLS.

Tree shaking

Tree shaking là phương pháp loại bỏ dead code khỏi bundle, làm giảm kích thước file JS trả về client. Phương pháp này được hỗ trợ bởi các bundler như webpack, esbuild và rollup.

Lazy import và lazy load

Lazy import giảm bundle size bằng cách chỉ import code của những tính năng cần thiết thay vì bundle toàn bộ. Ví dụ, code cho popup báo lỗi chỉ được load khi lỗi xảy ra, nên không tham gia vào bundle tại thời điểm load trang.

Lazy hydrate

Lazy hydrate tránh việc code được thực thi không cần thiết, ví dụ chỉ render các component nằm trong viewport tại loading time để giảm thời gian CPU bị block. Kỹ thuật này thường kết hợp với IntersectionObserver. Vì việc phát hiện một component có trong viewport hay không do JS thực thi, nên các phần tử LCP không nên render bằng lazy hydrate.

Time To First Byte

Time To First Byte (TTFB) không phải user-centric metric nhưng ảnh hưởng tới toàn bộ các chỉ số hiệu năng vì nó quyết định thời điểm resource bắt đầu về client. TTFB của file HTML quan trọng nhất do HTML là entrypoint của một webpage. Hai biện pháp cải thiện TTFB là caching và giảm thời gian SSR bằng cách loại bỏ các component không cần thiết.

Tối ưu bandwidth khi loading

Tại thời điểm loading, giảm bandwidth giúp các resource quan trọng được load nhanh hơn và trang hiển thị sớm hơn.

Tránh tác vụ làm trễ render

Hai nhóm thao tác làm tăng main thread blocking time cần tránh là recalculate style (insert thẻ style, thay đổi style hàng loạt) và layout thrashing (truy cập hoặc chỉnh sửa xen kẽ các thuộc tính vị trí và kích thước của element).

Rủi ro từ script nhúng ngoài

Script do người quản lý website nhúng qua công cụ như Google Tag Manager (GTM) có thể phá bỏ kết quả tối ưu, vì GTM cho phép chèn JS, CSS, HTML một cách linh động ngoài tầm kiểm soát của codebase. Điểm số đo được vì vậy còn phụ thuộc vào script nhúng ngoài lẫn các yếu tố như thời gian phản hồi API, network và cấu hình máy người dùng.