Vấn đề ở đây là gì?
Đã có một kỹ thuật được thiết lập tốt được gọi là bộ nhớ đệm phía máy khách. Bộ nhớ cục bộ HTML5 mang lại điều gì trong trường hợp này bộ nhớ đệm bị thiếu?
Bạn có thể có một số loại ứng dụng lạ phải tự động tải các đoạn mã JavaScript để bạn không thể sử dụng bộ đệm một cách hiệu quả, nhưng đó là một trường hợp cực kỳ hiếm.
Ngoài ra, hãy chú ý đến một điều khác. Các trình duyệt có chính sách cụ thể cho bộ đệm và hầu hết các trình duyệt khá tốt trong việc quản lý tốt bộ đệm (chỉ xóa nội dung cũ hơn, v.v.). Bằng cách triển khai bộ đệm tự tạo tại nhà, bạn ngăn các trình duyệt quản lý nó một cách chính xác. Nó không chỉ có thể bị chỉ trích mà còn có thể làm tổn thương bạn sớm hay muộn. Ví dụ: khi người dùng ứng dụng web báo cáo lỗi, bạn thường trả lời bằng cách yêu cầu họ xóa bộ nhớ cache. Tôi không chắc chắn những gì bạn sẽ hỏi trong trường hợp của bạn, vì xóa bộ nhớ cache sẽ không bao giờ giải quyết vấn đề với ứng dụng web của bạn.
Đáp lại lần chỉnh sửa đầu tiên của bạn (lần chỉnh sửa thứ hai của bạn không có chủ đề):
Tôi biết bộ nhớ cache của trình duyệt, vẫn sẽ có một số kiểm tra truy cập tiêu đề
Bạn dường như thiếu một số hiểu biết về bộ nhớ đệm trình duyệt. Đó là lý do tại sao cần phải hiểu cách thức hoạt động của nó trước tiên, trước khi bắt đầu thực hiện cơ chế bộ nhớ đệm tự làm tại nhà . Chỉ phát minh lại bánh xe của riêng bạn khi bạn hiểu đủ các bánh xe hiện có và có lý do chính đáng để không sử dụng chúng. Xem điểm 1 trong câu trả lời của tôi cho câu hỏi "Phát minh lại bánh xe và KHÔNG hối tiếc" .
Khi cung cấp một số dữ liệu qua HTTP, bạn có thể chỉ định một vài tiêu đề liên quan đến bộ đệm:
Last-Modified
Chỉ định khi nội dung được thay đổi,
Expires
Chỉ định khi trình duyệt phải yêu cầu máy chủ nếu nội dung thay đổi .
Hai tiêu đề này cho phép trình duyệt:
- Tránh tải xuống nội dung nhiều lần. Nếu
Last-Modified
được đặt thành tháng trước và nội dung đã được tải xuống hôm nay một vài giờ trước đó, thì không cần phải tải lại.
- Tránh truy vấn cho ngày mà tệp được sửa đổi lần cuối. Nếu
Expires
một thực thể bộ nhớ cache là ngày 05 tháng 5 ngày , năm 2014, bạn không cần phải đưa ra bất cứ yêu cầu GET không phải trong năm 2011, cũng không phải trong năm 2012 hoặc năm 2013, kể từ khi bạn biết rằng bộ nhớ cache là up-to-date.
Cái thứ hai là cần thiết cho CDN. Khi Google phục vụ JQuery cho khách truy cập Stack Overflow hoặc cdn.sstatic.net
phục vụ hình ảnh hoặc bảng định kiểu được sử dụng bởi Stack Overflow, họ không muốn trình duyệt truy vấn phiên bản mới mỗi lần. Thay vào đó, họ đang phục vụ các tệp đó một lần, đặt ngày hết hạn thành một cái gì đó đủ lâu và đó là tất cả.
Ví dụ, đây là ảnh chụp màn hình về những gì đang xảy ra khi tôi đến trang chủ Stack Overflow:
Có 15 tập tin để phục vụ. Nhưng tất cả những 304 Not Modified
phản ứng đó ở đâu? Bạn chỉ có ba yêu cầu nội dung đã thay đổi. Đối với mọi thứ khác, trình duyệt sử dụng phiên bản được lưu trong bộ nhớ cache mà không yêu cầu bất kỳ máy chủ nào .
Để kết luận, bạn thực sự cần phải suy nghĩ kỹ trước khi thực hiện cơ chế bộ đệm của riêng mình và đặc biệt là tìm một kịch bản tốt trong đó điều này có thể hữu ích . Như tôi đã nói ở đầu câu trả lời của mình, tôi chỉ có thể tìm thấy một: nơi bạn đang phục vụ các đoạn JavaScript để sử dụng chúng thông qua, OMG eval()
,. Nhưng trong trường hợp này, tôi khá chắc chắn rằng có những cách tiếp cận tốt hơn:
- Hiệu quả hơn bằng cách sử dụng các kỹ thuật bộ đệm tiêu chuẩn, hoặc
- Dễ bảo trì hơn.