Web Performance Insight

Cách Đọc Network Waterfall Để Chẩn Đoán Hiệu Suất Web

Tháng 9 15, 2026 webperflab_admin 17 min read Updated Tháng 9 15, 2026

Performance Investigation

Network waterfall cho biết từng resource được request khi nào, browser chờ bao lâu và response load xong lúc nào. Nhưng câu hỏi hữu ích nhất không đơn giản là “Request nào lớn nhất?”

Câu hỏi hữu ích là: Delay xảy ra ở đâu trong request path, và bước tiếp theo nên điều tra gì?

Waterfall là diagnostic evidence. Nó có thể cho thấy request bắt đầu muộn, thời gian chờ first response byte dài, transfer chậm, dependency chain và third-party activity. Nhưng bản thân nó không thể chứng minh vì sao JavaScript execution đắt hoặc vì sao rendering vẫn bị block sau khi network activity đã hoàn tất.

Đọc network waterfall như thế nào?

Hãy bắt đầu từ document request, sau đó xem critical resource bắt đầu khi nào, chờ response bao lâu, download mất bao lâu và điều gì đã initiate chúng. Waterfall giúp xác định late discovery, slow server response, long transfer và dependency chain, nhưng browser CPU và rendering problem cần thêm evidence như Performance Truy vết.

Network Waterfall Thực Sự Cho Bạn Thấy Điều Gì?

Network waterfall là timeline của browser request.

Trục ngang đại diện cho thời gian.

Mỗi hàng đại diện cho một request được tạo trong lúc page load hoặc chạy.

Tùy request, browser có thể dành thời gian để:

  • chờ trước khi request có thể được gửi;
  • resolve hostname;
  • establish connection;
  • gửi request;
  • chờ first response byte;
  • download response body.
VISUAL 1 — Annotated Network Waterfall

Document → Waiting (TTFB) → Content Download
CSS / JS → request start → waiting → download
Critical image → start time → initiator → completion
Third party → domain → timing → overlap

Waterfall cho thấy timing và relationship. Nó không tự động giải thích causation.

Hãy dùng nó như một phần của root-cause performance investigation rộng hơn.

Hãy Bắt Đầu Với Document Request

Document request là reference point đầu tiên cho phần lớn page-load investigation.

Tìm main HTML request và hỏi:

Điều hướng bắt đầu khi nào?
First response byte đến khi nào?
HTML response download mất bao lâu?
Subresource bắt đầu sớm hay chỉ sau khi document tiến triển?

Nếu document dành nhiều thời gian trong Waiting (TTFB), mọi parser-discovered resource đều bắt đầu từ một baseline muộn hơn.

Nếu document response nhanh nhưng critical image hoặc stylesheet bắt đầu muộn hơn nhiều, investigation chuyển sang discovery hoặc dependency timing.

Bắt đầu từ document, sau đó mở rộng ra các subresource quan trọng với user-visible critical path.

Hiểu Các Timing Stage Của Một Request

Chrome DevTools có thể hiển thị timing breakdown cho từng request. Không phải request nào cũng có mọi phase vì connection reuse, cache state, Service Worker và protocol behavior có thể làm request path khác nhau.

Queueing và stalled time

Queueing xảy ra trước connection start khi browser delay một request, ví dụ vì có request priority cao hơn, connection availability bị hạn chế hoặc browser scheduling condition khác đang áp dụng.

Stalled có thể xảy ra sau connection start vì lý do scheduling hoặc connection-related tương tự.

Không nên biến queueing dài trực tiếp thành root-cause conclusion. Trước tiên hãy hỏi request đó có critical không và resource nào khác đang cạnh tranh.

DNS, connection và TLS

Request tới origin mới có thể cần một số work trước khi HTTP data bắt đầu truyền.

Các phase liên quan có thể gồm:

  • DNS Lookup — resolve hostname;
  • Initial connection — establish connection, gồm connection handshake behavior và SSL negotiation;
  • proxy negotiation khi relevant.

Nếu existing connection được reuse, một số stage này có thể không xuất hiện lại.

Request sent

Đây là khoảng thời gian request đang được gửi.

Với page resource thông thường, stage này thường nhỏ so với waiting hoặc content download, nhưng request payload và connection condition có thể làm thay đổi.

Waiting for the response

Chrome gắn nhãn phase này là Waiting (TTFB).

Trình duyệt đang chờ first byte của response.

Timing này có thể phản ánh cả round-trip latency lẫn thời gian server hoặc upstream path cần để chuẩn bị response.

Waiting (TTFB) dài không tự động chứng minh “hosting chậm”. Network latency, cache state, origin processing, application work và upstream dependency đều có thể cần investigation.

Với WordPress-specific server-response diagnosis, xem diagnose high WordPress TTFB.

Content download

Content Download là thời gian dành để nhận response body.

Download dài có thể chỉ tới nhiều hướng:

  • large transfer size;
  • limited throughput;
  • slow network condition;
  • origin hoặc CDN delivery constraint;
  • browser bận tới mức delay việc đọc response.

Không nên mặc định file size một mình giải thích duration.

Request Start Time Quan Trọng Không Kém Duration

Một resource nhỏ và nhanh vẫn có thể làm user-visible performance kém nếu nó bắt đầu quá muộn.

Điều này đặc biệt quan trọng với critical asset như:

  • LCP image;
  • critical stylesheet;
  • font cần cho visible text;
  • script hoặc data cần trước khi important UI có thể xuất hiện.

Với mỗi critical request, hãy kiểm tra cả:

Nó bắt đầu khi nào?

Late start time có thể chỉ tới discovery, dependency, scheduling hoặc application timing.

Nó mất bao lâu?

Long duration có thể chỉ tới waiting, transfer, connection hoặc delivery behavior.

Một resource chỉ mất 100 ms để download vẫn có thể bị coi là muộn nếu browser tới giây thứ 2 mới discover nó.

Đây là cầu nối giữa waterfall analysis và late LCP discovery.

Cách Nhận Biết Late Resource Discovery

Hãy hỏi:

Trình duyệt biết tới resource này vào thời điểm nào?

So sánh request start time với document timeline.

VISUAL 2 — Late Discovery Example

HTML → JavaScript → component hoặc state change → critical image request

Possible discovery path gồm:

  • HTML → image;
  • HTML → stylesheet → background image;
  • HTML → JavaScript → component → image;
  • HTML → JavaScript → API → UI resource;
  • HTML → tag manager → third-party resource.

Waterfall có thể cho thấy một request bắt đầu muộn.

Nhưng thường bản thân waterfall không thể giải thích chính xác vì sao request bắt đầu đúng thời điểm đó.

Đây là lúc initiator trở nên quan trọng.

Dùng Request Initiator Để Hiểu Vì Sao Request Bắt Đầu Muộn

Thông tin request initiator trong Network panel giúp giải thích điều gì đã gây ra request.

Chrome có thể xác định initiator như:

  • HTML parser;
  • redirect;
  • JavaScript;
  • browser hoặc navigation activity khác.

Initiator tab cũng có thể cho thấy request initiator chain.

Khi critical request bắt đầu muộn, hãy kiểm tra initiator trước khi mặc định bản thân resource là problem.

Observation: critical image bắt đầu muộn.
Câu hỏi tiếp theo: điều gì initiate nó?
Possible finding: image chưa thể được request cho tới khi JavaScript tạo component reference tới nó.

Cách Đọc Resource Dependency Chain

Resource thường phụ thuộc vào resource trước đó hoặc application work.

For example:

Stylesheet path

HTML → CSS → font

Client-rendered path

HTML → JS → API → component asset

Mỗi dependency có thể đẩy user-visible critical request lùi về sau trong timeline.

Chrome DevTools có thể cho thấy initiator và dependency của request, giúp lộ ra các relationship này.

Không nên mặc định mọi dependency chain đều xấu.

Câu hỏi quan trọng là dependency đó có delay thứ gì quan trọng với user-visible critical path hay không.

Parallel Và Serial Loading

Waterfalls make request overlap visible.

Parallel loading

Nhiều request overlap theo thời gian.

Serial loading

Một request chỉ bắt đầu sau khi request hoặc dependency khác đạt tới một điểm nhất định.

Serial behavior không tự động là performance problem.

Nó trở nên quan trọng khi serialized dependency kiểm soát:

  • critical content;
  • LCP resource discovery;
  • rendering;
  • important user-facing UI.

Không nên tối ưu chỉ để đạt maximum parallelism. Hãy tối ưu user-visible critical path.

Cách Tìm LCP Resource Trong Waterfall

Bắt đầu bằng việc identify the LCP element.

Nếu LCP candidate đó dùng network resource, hãy tìm corresponding request trong waterfall.

Sau đó kiểm tra:

  • request start time;
  • initiator;
  • waiting time;
  • content download duration;
  • completion time.

Điều này giúp trả lời LCP problem liên quan tới:

  • document response;
  • late discovery;
  • slow resource transfer;
  • hoặc thứ gì xảy ra sau khi network resource đã sẵn sàng.

Để xem full routing framework, xem diagnose slow LCP.

Pattern 1: High Document TTFB

Pattern:

Document request bắt đầu sớm nhưng dành phần lớn duration trong Waiting (TTFB) trước khi HTML byte bắt đầu tới.

Điều này cho thấy response path cần investigation.

Nó không chứng minh:

  • hosting yếu;
  • PHP chậm;
  • database chậm;
  • CDN misconfigured.

Đó chỉ là hypothesis cần thêm evidence.

Pattern 2: Critical Resource Bắt Đầu Quá Muộn

Pattern:

Document đã response nhưng important image, font, stylesheet hoặc script tới muộn hơn nhiều mới bắt đầu.

Điều này chỉ về discovery, dependency hoặc scheduling.

Bước tiếp theo thường là:

  1. kiểm tra request start time;
  2. kiểm tra initiator;
  3. kiểm tra dependency chain;
  4. xác định resource có nằm trên user-visible critical path không.

Với LCP-specific case, xem late LCP discovery.

Pattern 3: Resource Download Quá Chậm

Pattern:

Request bắt đầu ở thời điểm hợp lý, waiting không phải dominant nhưng Content Download vẫn dài.

Possible investigation direction gồm:

  • resource transfer size;
  • compression;
  • connection throughput;
  • origin hoặc CDN delivery;
  • responsive resource selection;
  • network condition.

Đây là transfer problem hypothesis, không phải automatic image-format recommendation.

Pattern 4: Third-Party Request Chiếm Phần Lớn Network

Bên thứ ba activity có thể hiện ra dưới dạng:

  • nhiều external domain;
  • request được initiate bởi tag hoặc script;
  • late dependency chain;
  • analytics, advertising, chat hoặc embedded-media request overlap.

Waterfall có thể cho thấy network cost và request relationship.

Nó không cho thấy full CPU execution cost của third-party JavaScript.

Một script download nhanh vẫn có thể execute rất lâu trên main thread.

Khi Waterfall Trông Ổn Nhưng Page Vẫn Chậm

Đôi khi important request có vẻ hoàn thành nhanh nhưng page vẫn cảm giác chậm.

Possible direction gồm:

  • long JavaScript task;
  • style calculation;
  • layout;
  • rendering work;
  • client-side execution;
  • interaction processing.
VISUAL 3 — Network vs CPU

Network request complete → main thread vẫn bận → visible content hoặc interaction vẫn bị delay

Đây là điểm waterfall đã chạm giới hạn.

Hãy dùng Performance Truy vết và cân nhắc phân biệt network vs CPU bottleneck.

Network Cost Và CPU Cost

Câu hỏi Waterfall có giúp không? Có cần Performance Truy vết không?
Request bắt đầu khi nào? Yes Usually not
Chờ response bao lâu? Yes Usually not
Download mất bao lâu? Yes Usually not
Điều gì initiate request? Có, với Initiator evidence Sometimes
JavaScript execute bao lâu? Không, chưa đủ Yes
Luồng chính có bị block không? No Yes
Style/layout có delay paint không? No Yes

Cache Signal Làm Waterfall Thay Đổi

Một request có thể đến từ:

  • memory cache;
  • disk cache;
  • Service Worker;
  • CDN hoặc edge cache;
  • network hoặc origin.

Cache state khác nhau có thể tạo waterfall rất khác nhau.

Repeat visit với warm browser cache không nên được xem là tương đương first visit với cold cache.

First Load Và Repeat Load

Luôn xác định state bạn đang quan sát.

First load có thể gồm:

  • connection setup;
  • DNS;
  • cold browser cache;
  • first-time third-party request;
  • uncached resource transfer.

Repeat load có thể reuse:

  • connection;
  • browser cache;
  • Service Worker response;
  • cached resource khác.

Dùng một performance baseline xác định để comparison có ý nghĩa.

Di động Và Desktop Waterfall Có Thể Khác Nhau

Desktop waterfall behavior không tự động đại diện mobile.

Khác biệt có thể đến từ:

  • network profile;
  • device behavior;
  • responsive image;
  • conditional resource;
  • script behavior;
  • viewport-driven application path khác.

Khi mobile experience là issue, hãy reproduce và inspect relevant mobile condition thay vì dựa vào desktop-only waterfall.

Dùng Filter Và Sort Để Trả Lời Một Câu Hỏi Cụ Thể

Network panel cho phép filter resource type như:

  • document;
  • CSS;
  • JavaScript;
  • image;
  • font;
  • Fetch/XHR.

Bạn cũng có thể inspect specific domain hoặc sort waterfall theo start time, response time, end time, total duration hoặc latency.

Dùng filter và sorting để test hypothesis, không chỉ vì tool có các control đó.

Ví dụ:

  • Image request nào bắt đầu muộn nhất?
  • Request nào dành nhiều thời gian waiting nhất?
  • Bên thứ ba domain nào tạo nhiều request activity nhất?
  • Resource nào kết thúc sau thời điểm user-visible critical content lẽ ra đã phải xuất hiện?

Các Câu Hỏi Diagnostic Khi Đọc Waterfall

Document response khi nào?

Bắt đầu với HTML response path.

Critical resource nào bắt đầu muộn?

So sánh request start time với document timeline.

Vì sao chúng bắt đầu muộn?

Inspect initiator và dependency.

Request nào mất nhiều thời gian nhất?

Tách long waiting khỏi long downloading.

Thời gian nằm ở waiting hay downloading?

Phân biệt này thay đổi investigation tiếp theo.

Resource đang load parallel hay serial?

Tìm dependency nằm trên user-visible critical path.

Bên thứ ba domain nào tham gia?

Tách first-party và external request path.

Request nào thực sự user-critical?

Không phải late request nào cũng quan trọng với initial experience.

Network có thực sự là bottleneck không?

Nếu request đã hoàn tất nhưng page vẫn chậm, hãy inspect browser CPU và rendering.

Bạn cần evidence gì tiếp theo?

Route sang initiator, trace, server hoặc application evidence.

Waterfall Pattern → Ý Nghĩa → Giới Hạn → Bước Tiếp Theo

Waterfall pattern Nó cho biết Nó không chứng minh Bước tiếp theo
Document waiting rất lâu Response path đang tiêu tốn thời gian trước first byte Hosting yếu TTFB / cache / origin investigation
Critical image bắt đầu muộn Discovery hoặc scheduling muộn Image quá lớn Initiator và dependency investigation
Request bắt đầu sớm nhưng download chậm Transfer duration cao Phân phối layer chính xác nào chịu trách nhiệm Size / network / CDN / throughput evidence
JavaScript download nhanh Network transfer tương đối nhanh JavaScript execute rẻ Performance Truy vết
Nhiều third-party request overlap Có external network activity Bên thứ ba CPU impact hoặc business necessity Truy vết và dependency analysis

Request Stage → Diagnostic Meaning → Câu Hỏi Tiếp Theo

Request stage Diagnostic meaning Câu hỏi tiếp theo
Queueing / Stalled Request chờ trước hoặc quanh connection use Có higher-priority hoặc connection-related constraint tham gia không?
DNS Lookup Có hostname resolution work Đây là new origin hay reusable connection path?
Initial connection Có connection establishment Connection setup có ảnh hưởng đáng kể critical request không?
Waiting (TTFB) Thời gian trước first response byte Network latency, cache, origin hay upstream delay?
Content Download Thời gian nhận response body Resource size, throughput hay browser-read delay?
Late start Trình duyệt tới muộn mới bắt đầu request Ai initiate nó và dependency nào tới trước?

Waterfall Diagnostic Decision Tree Thực Tế

VISUAL 4 — Waterfall Decision Tree

Document → Critical start time → Waiting → Download → Initiator → CPU / Rendering

DOCUMENT RESPONSE CÓ MUỘN KHÔNG?
│
├─ CÓ
│  └─ Điều tra TTFB → cache → origin → server / application
│
└─ KHÔNG
   ↓
NGHIÊM TRỌNG RESOURCE CÓ BẮT ĐẦU MUỘN KHÔNG?
│
├─ CÓ
│  └─ Kiểm tra discovery → initiator → dependency chain
│
└─ KHÔNG
   ↓
RESOURCE CÓ DOWNLOAD QUÁ LÂU KHÔNG?
│
├─ CÓ
│  └─ Điều tra transfer size → network → CDN → throughput
│
└─ KHÔNG
   ↓
PAGE VẪN CHẬM SAU KHI RESOURCE HOÀN THÀNH?
│
├─ CÓ
│  └─ Dùng Performance Truy vết → CPU → main thread → rendering
│
└─ KHÔNG
   └─ Tiếp tục dependency / critical-path analysis

Những Sai Lầm Phổ Biến Khi Đọc Network Waterfall

Chỉ nhìn request lớn nhất

Late start time có thể quan trọng hơn size.

Chỉ nhìn total load time

Total completion không giải thích critical path.

Không bắt đầu từ document

Subresource timing cần document baseline.

Bỏ qua request start time

Request nhanh vẫn có thể bắt đầu quá muộn.

Nhầm waiting với downloading

Chúng chỉ tới investigation direction khác nhau.

Đổ lỗi hosting từ high TTFB

Waiting không xác định responsible backend layer.

Đổ lỗi large image cho LCP

Image có thể không phải LCP candidate hoặc được discover muộn.

Bỏ qua initiator

Late request thường cần initiator evidence.

Trộn first load và repeat load

Cache và connection state có thể khác đáng kể.

Bỏ qua third-party domain

External dependency có thể thay đổi network timing và discovery.

Dùng waterfall để chứng minh CPU bottleneck

Network timing không cho thấy full JavaScript execution hoặc rendering cost.

Không xác định actual LCP element

Image nhìn lớn nhất bằng mắt không tự động là LCP.

Chỉ test desktop

Di động có thể request resource khác trong condition khác.

Chỉ test một lần

Một waterfall có thể chứa cache hoặc network noise.

Không có baseline

Không có comparable condition thì before/after interpretation sẽ yếu.

Network Waterfall Không Thể Cho Bạn Biết Điều Gì?

Waterfall mạnh nhưng scope có giới hạn.

Nó không giải thích đầy đủ:

JavaScript execution cost
Long task
Style recalculation
Layout cost
Rendering cost
Interaction delay
Full application root cause
Server internal khi không có server evidence

Nếu network trông ổn nhưng page vẫn chậm, hãy tiếp tục với Performance Truy vết.

Nếu document response chậm, hãy tiếp tục với server hoặc application evidence.

Nếu request bắt đầu muộn, hãy tiếp tục với initiator và dependency evidence.

Nên Inspect Evidence Gì Tiếp Theo?

Waterfall Cho Thấy Delay Nhưng Root Cause Vẫn Chưa Rõ?

Network waterfall thường là cách nhanh nhất để thấy loading time đang bị tiêu tốn ở đâu, nhưng nó chỉ là một layer của investigation. Khi waterfall cho thấy late dependency, slow origin response hoặc timing gap chưa giải thích được, một web performance investigation có cấu trúc có thể kết nối network evidence với initiator, browser trace và server evidence trước khi thay đổi production.

WebPerfLab — Đo lường → Truy vết → Diagnose → Tối ưu → Kiểm chứng

Điểm Cần Nhớ

Hãy bắt đầu với:

  • document request;
  • critical request start time;
  • Waiting (TTFB);
  • Content Download;
  • request initiator;
  • dependency relationship.

Sau đó xác định bottleneck nằm ở:

  • network;
  • delivery;
  • resource discovery;
  • hoặc nằm hoàn toàn ngoài network.
Quan sát→
So sánh→
Truy vết→
Đặt hypothesis→
Confirm→
Investigation sâu hơn

Waterfall là evidence. Chẩn đoán nguyên nhân gốc cần layer proof tiếp theo.