2015-10-21 14 views
30

Tôi đang phân phối nội dung tĩnh nhằm mục đích lưu vào bộ nhớ cache của trình duyệt vô thời hạn. Chrome đang lưu vào bộ nhớ cache như mong đợi nhưng vẫn dành thời gian "tải xuống". Tôi đang sử dụng Chrome 46.0.2490.71.Tại sao Chrome dành thời gian "tải xuống" nội dung từ bộ nhớ cache?

Chrome Network Tab

Như bạn có thể thấy, nội dung đang được phục vụ từ bộ nhớ cache, nhưng vẫn mất 68ms cho nội dung tải về. Điều này làm cho hình ảnh svg nhấp nháy ở trên mỗi lần tải trang, mặc dù tệp được lưu vào bộ nhớ cache.

Dưới đây là thông tin thời gian có liên quan từ một tải trang trong chế độ Incognito:

Chrome Timeline Tab

Các "Tổng thời gian" và "tổ chức sự kiện Time" lĩnh vực cho mỗi người trong số những sự kiện đó là zero. Nhân rộng này với các tập tin phục vụ tại địa phương (nhưng vẫn còn từ bộ nhớ cache) sự kiện "Nhận dữ liệu" chỉ được nhìn thấy một lần.

Một vài điểm thú vị cần lưu ý:

  • Phục vụ cùng một tập tin từ máy tính cục bộ của tôi, với bộ mã khác nhau không tạo ra sự chậm trễ tải tương tự.
  • Chuyển sang chế độ Ẩn danh (không có tiện ích mở rộng) sẽ giảm một nửa thời gian tải xuống nhưng không loại bỏ được.
  • Làm mới trang nhanh hơn, có vẻ như mất ít thời gian hơn để nhận được phản hồi 304 từ máy chủ hơn là chỉ tải nó từ bộ nhớ cache.
  • Việc đóng các công cụ dev không có bất kỳ ảnh hưởng nào đến độ trễ.
  • IE 11, Edge và Firefox 41 không hiển thị bất kỳ sự chậm trễ nào.

Nguyên nhân có thể có?

+0

Bạn đã tải tiện ích mở rộng nào? Hầu hết các tiện ích mở rộng không hoạt động ở chế độ Ẩn danh ... – malix

+0

Điều này có thể do tiện ích bạn đã cài đặt. Nhiều lần họ gây ra những lỗi lạ như thế này, bởi vì họ có quyền truy cập vào nhiều thứ trong mã/trình duyệt ... Tôi chưa bao giờ chạy vào điều này, và tôi luôn sử dụng devtools để đo lường hiệu suất của trang web, vì vậy tôi không nghĩ rằng đây là lỗi chrome. Chỉ cần thử vô hiệu hóa chúng, và chúng cho phép chúng từng cái một. – gillyb

+1

Thành thật mà nói tôi không nghĩ rằng 67ms là không thực tế khi tải 142kb từ đĩa. –

Trả lời

9

Vì vậy, điều này phải làm với cách bộ nhớ đệm hoạt động trong Chrome. Tôi không có kinh nghiệm cá nhân với codebase của Chrome, nhưng tôi biết một chút về lý thuyết của nó. (Tôi cũng đã tìm thấy một tham chiếu đến việc triển khai bộ nhớ cache của Chrome tại đây cho những người tò mò hơn: chromium disk cache)

Để tham khảo, đây là ảnh chụp màn hình của tôi khi tải câu hỏi Stack Overflow thực tế của bạn trong Chrome với bảng Network open and the Network Throttling option set sang "Ngoại tuyến". Lưu ý rằng mọi mục nhập trong danh sách này đều được lấy từ bộ nhớ cache!

Imgur screencap

Bạn cũng sẽ nhận thấy rằng Chrome dành thời gian "tải" mỗi tập tin. Tại sao điều này? Vâng, bộ nhớ cache của Chrome là cơ sở dữ liệu và cơ sở dữ liệu đó cũng được nén để tiết kiệm dung lượng. Khi bạn lấy một tài liệu từ bộ nhớ cache, giá của hồi đó không phải là số không. Chrome phải tra cứu mục đó trong cơ sở dữ liệu bộ nhớ cache và sau đó thổi phồng mục nhập đó vào bộ nhớ để Chrome có thể làm việc với nó. Tôi không biết các chi tiết chính xác liên quan đến cách bảng điều khiển công cụ chrome-dev-mạng hiển thị thời gian, nhưng tôi đoán rằng nhận tệp đó từ đĩa, giải nén tệp, sau đó phân tích cú pháp và làm việc với kết quả là những gì bạn thấy được phản ánh trong "Thời gian tải xuống".

Tôi không thể nhận xét về lý do tại sao các trình duyệt khác cũng không có sự chậm trễ này vì tôi không có nhiều kinh nghiệm với chúng.Có thể là họ sử dụng phương pháp hiệu quả hơn để lấy những thứ từ bộ nhớ cache (có thể), hoặc có thể là họ giữ bộ nhớ cache trong bộ nhớ mọi lúc (không), hoặc họ bỏ qua một số kiểm tra tính toàn vẹn của Chrome đang tạo dữ liệu bộ nhớ cache (có thể)

+1

Có cách nào để ưu tiên những gì đi vào bộ nhớ so với đĩa trong bộ đệm không? – Skylervich

0

Khi tôi chuyển tiêu đề ("Nội dung dài: xxx"), nó tải nhanh hơn 100%!

Các vấn đề liên quan