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.
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:
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.
Đâ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:
So sánh request start time với document timeline.
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:
Đ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:
Điều này chỉ về discovery, dependency hoặc scheduling.
Bước tiếp theo thường là:
- kiểm tra request start time;
- kiểm tra initiator;
- kiểm tra dependency chain;
- 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:
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.
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ế
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 đủ:
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.
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.