2009-11-26 49 views
5

Tôi có câu hỏi liên quan đến kỹ thuật vô hiệu hóa bộ nhớ cache ... Tôi đang cố gắng triển khai cơ chế cho trang web của mình, tự động vô hiệu hóa bộ nhớ cache của trình duyệt (css, hình ảnh ...). Tôi muốn có thể làm mất hiệu lực bộ nhớ cache của trình duyệt, bất cứ khi nào tôi cập nhật trang web (thay đổi hình ảnh hoặc kiểu);ASP.NET - Vô hiệu hóa bộ nhớ cache của trình duyệt

Ví dụ: đối với bản phát hành hiện tại, trong số đó, css và một số hình ảnh đã thay đổi. Trong tình huống này, tôi muốn sau khi cập nhật xong, khi người dùng thực hiện yêu cầu tới trang web, bộ nhớ cache của trình duyệt sẽ tự động bị vô hiệu hóa, do đó buộc phải tải xuống lại hình ảnh và kiểu mới. Điều này nên được thực hiện chỉ cho yêu cầu đầu tiên của khách hàng ... những người sau đây nên được lấy ra từ bộ nhớ cache (do đó, thiết lập các pragma không có bộ nhớ cache là ra câu hỏi).

Dưới đây là những gì tôi đã cố gắng: trong xử lý sự kiện BeginRequest, tôi đã thêm các dòng sau: Response.Cache.SetCacheability (HttpCacheability.ServerAndPrivate); Response.Cache.SetETag ("\" e111293b17594f1487d136ea7e9314ac \ "");

điều này đặt ETag trong tiêu đề phản hồi. Tôi thấy rằng nếu tôi thay đổi ETag này tại mỗi bản phát hành, và đặt nó ở mỗi yêu cầu, bộ nhớ cache sẽ bị vô hiệu, nhưng có vẻ như nó không phải là. Tôi đã sử dụng tiêu đề HTTP Live để xem kết quả và ETAG được thiết lập chính xác cho phản hồi, nhưng css và hình ảnh vẫn được lấy từ bộ nhớ cache ....

Bất kỳ ý tưởng nào về cách tôi có thể thực hiện việc này hoặc nếu nó có thể hoàn thành được không?

Cảm ơn trước!

Trả lời

5

Tôi đã gặp phải các vấn đề như thế này trong quá khứ. Thật không may tôi không thể tìm thấy một cách thực sự tốt đẹp để thực hiện điều này vì vậy tôi đã phải đưa ra một workaround. Tôi đã chỉ đối phó với vấn đề này cho các tập tin CSS vì vậy tôi thêm một tham số chuỗi truy vấn thêm cho mỗi tài liệu tham khảo CSS, ví dụ

<link rel="stylesheet" type="text/css" 
     href="default.css?buildnumber=<%= Buildnumber %>" /> 

Số xây dựng được tăng lên với mỗi bản phát hành để trình duyệt đã buộc phải đi tìm kiếm mới này tập tin. Không phải là một giải pháp lý tưởng, nhưng nó hoạt động mà không có một xô.

+0

đó là một ý tưởng hay, nhưng những gì về hình ảnh ... nó không phải là dễ dàng như vậy để đặt một param truy vấn cho mỗi refference hình ảnh trong dự án ... cảm ơn cho câu trả lời – GeoXYZ

+0

Điều này vẫn làm việc cho hình ảnh. Có lẽ nếu tất cả hình ảnh của bạn là điều khiển máy chủ, bạn có thể ghi đè lên một sự kiện trang, có thể bỏ qua, và tìm tất cả hình ảnh và nối thêm tham số url – Bob

+0

vâng, tôi biết tôi có thể làm điều đó, nhưng nó không phải là một thực hành tốt ... tất cả, nghĩ rằng tôi sẽ phải làm điều này trên tất cả các trang với hình ảnh trên chúng (vì không chỉ masterpage có hình ảnh, nhưng điều khiển người dùng cũng có hình ảnh bên trong); thứ hai, để tự động hóa quy trình này (không phải điều chỉnh mã bất cứ khi nào tôi thêm một điều khiển hình ảnh khác trên trang), tôi sẽ phải lặp qua các điều khiển trang và chỉ tìm các điều khiển hình ảnh và sửa đổi thuộc tính imageurl .. Và điều này rất tốn thời gian, đặc biệt là nếu số lần truy cập cho điều khiển đó cao, do đó gây ra hiệu suất. – GeoXYZ

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