Total Blocking Time – Mọi thứ bạn cần biết

Là một trong những chỉ số quan trọng được cho vào Core Web Vitals bởi Google, Total Blocking Time – Mọi thứ bạn cần biết (Tổng thời gian bị chặn) đóng vai trò quan trọng trong việc giảm thời gian tải trang và mang tới trải nghiệm người dùng tốt hơn. Hãy cùng Code Tốt và các chuyên gia tìm hiểu về Total Blocking Time nhé.

Total Blocking Time trong công cụ Lighthouse.
Công cụ Page Speed có thể hiện chỉ số Total Blocking Time khá rõ ràng.

Total Blocking Time là gì?

Total Blocking Time (TBT) – tạm dịch: Tổng thời gian bị chặn, là chỉ số xác định tổng thời gian các tác vụ bị chặn khi trình duyệt tiến hành render website. Chỉ số này đại diện cho tổng số thời gian người dùng cần phải chờ trước khi có thể tương tác với website. Nó được tính toán giữa các chỉ số First Contentful Paint (FCP) và Time to Interactive (TTI), và là kết quả của thời gian bị chặn cho các tác vụ (task) dài của trình duyệt.

Trong thời gian tải trang, từ thời điểm trình duyệt bắt đầu đọc và tải, chuỗi chính (main thread) sẽ chịu trách nhiệm xử lý các tác vụ khác nhau như đọc và xử lý HTML, hay xử lý file Javascript. Tuy vậy, có một số tác vụ sẽ phát sinh thời gian dài hơn.

Các chỉ số của Core Web Vitals
Các chỉ số của Core Web Vitals

Xem thêm một số bài viết hữu ích tại Code Tốt nhé

Thế nào là một tác vụ dài?

Một tác vụ dài được xác định vượt quá 50ms (mili giây). Khi tác vụ được khởi động, trình duyệt không thể ngắt nó, và giống như một đoàn tàu có chung một đường ray, một tác vụ bị kéo dài sẽ chặn cả chuỗi chính. Kết quả là website sẽ không phản hồi tới hành động của người dùng (như bấm chuột, scroll, hoặc bấm liên kết) cho tới khi tác vụ bị chậm kia hoàn thành.

Lấy ví dụ với ảnh dưới đây, tổng thời gian tác vụ kéo dài được tính là 140ms, bao gồm 30ms và 110ms từ 2 tác vụ khác nhau.

Minh hoạ tác vụ kéo dài trong Total Blocking Time

Tại sao quá 50ms được coi là dài? Bạn có thể tham khảo mẫu hiệu suất RAIL được Google giới thiệu ở đây.

Đánh giá chỉ số Total Blocking Time

Thời gian TBT (bằng mili-giây)Màu biểu thị (đánh giá)
0-200Xanh – Tốt, nhanh
200-600Cam – Trung bình, chưa nhanh
Trên 600Đỏ – Chậm
Cách Google xác định thông số TBT

Sự khác nhau giữa TBT và First Input Delay

First Input Delay chỉ được xác định nếu người dùng tương tác với trang web. Những công cụ như Lighthouse không giả lập người dùng tương tác, và thay thế bằng chỉ số TBT như một giá trị đối chiếu.

First Input Delay cũng phụ thuộc vào loại hành vi người dùng tương tác, lấy ví dụ, loại nút bấm (button) nào người dùng sẽ bấm vào. Do đó, chỉ số FID tăng có thể do code thay đổi dẫn tới web chậm, mà cũng có thể là do người dùng đang tăng tần suất sử dụng các chức năng mất nhiều thời gian tải hơn, ví dụ như Xem thêm của danh mục sản phẩm.

Việc độ trễ của tương tác người dùng tăng khiến luồng chính bị chặn. Chỉ số Total Blocking Time cao phản ánh có nhiều lần tải bước tải trang khi trang phản hồi chậm nếu người dùng thử tương tác trên web.

Sự khác nhau giữa TBT và Time to Interactive (TTI)

Có thể bạn sẽ nhầm lẫn giữ TBT và TTI.

Time to Interactive (TTI) cho bạn biết mất bao lâu để một trang có thể hoàn toàn tương tác được, tính bằng giây. Để được cân nhắc tương tác, trang cần hiển thị nội dung có thể đọc được và phản hồi với tương tác của người dùng ít hơn 50ms (mili-giây).

Nhưng khi nào chính xác trang sẽ hiển thị nội dung đọc được? Đó chính là thời gian mà chỉ số First Contentful Paint (FCP) giúp xác định. FCP nói cho bạn biết khi nào chữ đầu tiên hoặc ảnh đầu tiên được hiện ra.

Và TBT thì sử dụng kết hợp giữa FCP và TTI.

Cách xác định chỉ số Total Blocking Time?

Tất nhiên, do là một chỉ số được Google cho vào Core Web Vitals, bạn có thể dùng nhiều công cụ để tra cứu.

Chrome DevTools

Công cụ này không xa lạ gì với các lập trình viên trên môi trường web development. Sử dụng nó để xác định các chuỗi gián đoạn hoặc kéo dài bằng tab Performance (Hiệu suất).

Cách đo Total Blocking Time trên trình duyệt Chrome DevTools

Dịch vụ chăm sóc và bảo trì website sẽ giúp bạn xác định chỉ số Total Blocking Time một cách nhanh nhất có thể.

LightHouse

LightHouse cũng là công cụ có sẵn đi kèm với Chrome. Bạn bật lên và kiểm tra trên Mobile/Desktop khá dễ dàng. Nó có kết quả thể hiện tương đối giống PageSpeed, nhưng chất lượng hơn do network có sự tương đồng cao với trải nghiệm người dùng thật.

Sử dụng kiểm tra Total Blocking Time bằng Lighthouse

Khi bạn chạy xong, kết quả hiển thị sẽ giúp bạn tìm hiểu nguyên nhân để tối ưu tốt hơn.

Kết quả chỉ số LightHouse giúp xử lý Total Blocking Time

Ngoài ra, bạn cũng có thể kiểm tra trên PageSpeed Tool để đánh giá dễ dàng hơn.

Khắc phục chỉ số Total Blocking Time như thế nào?

Đầu tiên, phần lớn lỗi của TBT sẽ đến từ hiệu suất sử dụng Javascript, và các đoạn mã liên quan tới thực thi Javascript.

Bạn sẽ cần cân nhắc tối ưu các vấn đề sau, hoặc có thể sử bảo trì web trước khi nó gặp những chỉ số xấu.

Giảm thời gian thực thi Javascript

Điều này tức là bạn cần giảm thời gian mà Javascript cần chạy các công việc parsing, compiling executing. Mặc định, Javascript thực thi trên luồng chính (main-thread) và nếu nó đang chưa hoàn thành, trình duyệt không thể chạy các công việc khác.

Tuỳ theo thứ tự của mã script được chạy mà nó sẽ dẫn tới các thành phần khác như UI không thể render ra, bị delay (tăng độ trễ) render ra nội dung trang và ảnh hưởng tới tương tác.

Về phía xử lý cụ thể, bạn sẽ cần.

Preload các file JS bắt buộc quan trọng. Mẫu code ví dụ nằm trong thẻ <HEAD> như là:

<link rel="preload" href="assets/js/frontend.min.js" as="script">

Sử dụng các tag deferasync phù hợp cho Javascript.

<script async src="assets/">
<script defer src="">
  • async cho phép Javascript chạy sớm nhất có thể ngay khi tải xong
  • defer chỉ chạy sau khi trang tải xong

Giảm công việc chuỗi chính (main thread) chạy

Điều này hiểu như thế nào? Giống như một chiếc xe tải chở nhiều đồ vật cồng kềnh và nặng, một website chứa nhiều mã JS nặng khiến người dùng chờ lâu và công việc xử lý của trình duyệt chậm.

Bạn sẽ cần làm gì?

  • Nén dung lượng file JS nhỏ nhất
  • Giảm thời gian tính lại (recaculate) khi trinh duyệt xử lý giao diện
  • Giảm thời gian delay cho bố cục UI hiển thị sớm nhất

Bỏ đi thành phần Javascript không sử dụng

  • Các mã JS không sử dụng ngay trên màn hình đầu tiên thì nên tải sau. Hoặc tải nhưng không cần thực thi ngay.
  • Bỏ hẳn các mã JS không sử dụng trên trang. Ví dụ slide sản phẩm thì trang chủ không cần tải.

Giảm ảnh hưởng từ mã nhúng bên thứ ba

Mã nhúng bên thứ ba rát dễ là nguyên nhân khiến web chậm.

Bạn cần làm gì? Giảm thời gian kết nối tới DNS. Code mẫu để giảm thời gian phân giải DNS

<link rel="preconnect" href="https://analytics.google.com">
<link rel="dns-prefetch" href="https://analytics.google.com">

Lazyload JS các bên thứ ba. Chẳng hạn như mã live chat Tawk.to, Facebook Messenger Chat,…

Sử dụng các thuộc tính defer JS (ở trên mình có code mẫu).

Nếu sử dụng các mã nhúng iframe, nên sử dụng code mẫu:

<iframe loading="lazy" src="">

Thay thế thư viện JS nhẹ hơn

Những thành phần JS nặng cũng cần thay thế. Một thư viện nặng và nhiều tính năng sẽ là cơn ác mộng cho website của bạn, nhất là trên màn hình tải trang đầu tiên.

Chẳng hạn, mình sẽ không dùng thư viện Slider plugin WordPress Slider Revolution và viết một đoạn code nhỏ để sử dụng JS slider swiper-slider. Một số thư viện không có hỗ trợ responsive image do code quá lâu cũng không nên dùng.

Kết luận

Là một trong những chỉ số quan trọng và đóng góp tới 30% vào hiệu suất Core Web Vitals, bạn cần và nên tìm hiểu sâu Total Blocking Time (TBT) để bảo trì website, cải thiện chất lượng trải nghiệm trang. Những ai quan tâm về onpage SEO hẳn sẽ không bỏ qua và tìm cách tối ưu website cho chỉ số này tốt hơn.

4.8/5 - (9 bình chọn)

Bài viết liên quan