Họ đang đo gì
Bạn có kỷ luật đo trước khi sửa không, và có phân biệt được triệu chứng với nguyên nhân.
Trả lời ngắn~30 giây
Mình hỏi ba câu trước khi mở IDE: endpoint nào và ở phân vị nào, chậm từ bao giờ (có tương quan với lần deploy nào không), và mục tiêu là bao nhiêu. Sau đó nhìn tracing để xem thời gian đi đâu — thường thì 80% nằm ở một chỗ, và nó gần như không bao giờ là chỗ người ta đoán. Chỉ khi đó mới sửa, rồi đo lại để chứng minh là đã sửa đúng.
Giải thích sâu
Câu hỏi “so với cái gì” quan trọng hơn vẻ ngoài. Không có mục tiêu thì việc tối ưu không có điểm dừng, và bạn sẽ dành ba tuần để đưa 800ms xuống 600ms trong khi người dùng cần 200ms — nghĩa là đã bỏ ba tuần vào một cách tiếp cận không bao giờ tới đích. Biết mục tiêu từ đầu quyết định bạn sửa hay bạn thiết kế lại.
Về công cụ, tracing phân tán cho bạn bức tranh đúng nhanh nhất vì nó chỉ ra thời gian nằm ở tầng nào; profiler CPU chỉ hữu ích sau khi bạn biết chắc nút thắt là CPU. Trong thực tế thì phần lớn API chậm không phải vì CPU mà vì CHỜ: chờ database, chờ dịch vụ khác, chờ khoá. Mở profiler CPU đầu tiên là cách rất phổ biến để tìm sai chỗ trong hai ngày.
Còn một điều đáng nói ở mức senior: đôi khi câu trả lời đúng không phải làm nó nhanh hơn mà là làm nó không cần thiết. Endpoint chậm vì tổng hợp dữ liệu cho một dashboard mà người dùng mở ba lần một ngày? Tính sẵn theo lịch. Chậm vì trả về 5.000 hàng mà giao diện chỉ hiển thị 20? Sửa hợp đồng. Những cách này giảm thời gian xuống bậc khác hẳn, còn tinh chỉnh truy vấn chỉ giảm vài chục phần trăm.
Câu hỏi tiếp theo họ sẽ hỏi
?Không có tracing thì bắt đầu từ đâu?
Đo thô bằng log có mốc thời gian ở vài ranh giới chính — vào handler, trước/sau mỗi lời gọi ngoài, trước khi trả về. Xấu nhưng đủ để khoanh vùng trong một buổi chiều, và nó thường là bước đầu tiên để biện minh cho việc dựng tracing thật.
?Tối ưu xong thì làm gì để nó không quay lại?
Đặt ngân sách trong CI: thời gian phản hồi hoặc số truy vấn cho endpoint đó, và build đỏ khi vượt. Không có ngưỡng tự động thì hiệu năng chỉ đi một chiều — xấu dần theo từng PR không ai để ý.
Trả lời thế này là mất điểm
- Bắt đầu bằng “thêm cache”. Bạn chưa biết cái gì chậm, và cache có thể giấu vấn đề thay vì sửa nó.
- Tối ưu vi mô trong code khi thời gian thật nằm ở một truy vấn database. Đây là hình thức lãng phí công sức phổ biến nhất.