2010-11-04 30 views
6

Tôi có một hệ thống nơi bộ nhớ cache tối đa được đặt thành 0 và có vấn đề, khi tôi đã thực hiện một số thay đổi trong style.css của tôi không thay đổi, không apear cho khách hàng. Trình duyệt sẽ sử dụng phiên bản css cũ được lưu trong bộ nhớ cache. Tôi có câu hỏi đơn giản: Đặt tên tệp css là style.css? 123 sẽ được lưu vào bộ nhớ cache dưới dạng mới?Lưu tập tin Css caching

+0

bạn có đang sử dụng máy chủ IIS hoặc Apache không? –

Trả lời

15

Có, thêm chuỗi truy vấn duy nhất vào URI của tài nguyên sẽ buộc khách hàng tìm nạp phiên bản "mới" (vì khách hàng không biết rằng đó chỉ là một cập nhật của tài nguyên được lưu trước đó). Điều này được gọi là vân tay và bạn thường sử dụng dấu thời gian hoặc số phiên bản gia tăng của tệp CSS.

Nguyên tắc cơ bản về web của Google có bài viết tuyệt vời trên HTTP cache optimization. Đặc biệt là phần tựa đề "hủy bỏ hiệu lực và cập nhật phản ứng cache:"

Làm thế nào để bạn có được tốt nhất của cả hai thế giới: client-side caching và cập nhật nhanh chóng? Bạn thay đổi URL của tài nguyên và buộc người dùng tải xuống phản hồi mới bất cứ khi nào nội dung của nó thay đổi. Thông thường, bạn làm điều này bằng cách nhúng dấu vân tay của tệp hoặc số phiên bản, trong tên tệp — ví dụ, kiểu. x234dff .css.

Lưu ý rằng dấu vân tay không cần phải là số thứ tự. Bất kỳ giá trị - băm, phiên bản, v.v. - sẽ làm miễn là rủi ro va chạm bị hạn chế.


1) Đây là những gì được thực hiện ở đây trên SO, ví dụ: http://sstatic.net/js/global-login.js?v=12

+0

Rõ ràng, việc sử dụng các tham số chuỗi truy vấn là xấu. Xem http://stackoverflow.com/a/13377291/637609 –

+0

bạn có thể vui lòng cập nhật liên kết tối ưu hóa bộ nhớ cache không? – shankbond

+0

@shankbond Xong. – jensgram

0

có, việc thêm tham số chuỗi truy vấn vào mỗi tệp style.css sẽ buộc tệp này vào bộ nhớ cache một lần nữa.
vì trình duyệt lưu trữ từng thành phần tĩnh với url của nó, vì vậy khi url được thay đổi, tệp mới sẽ được lưu vào bộ nhớ cache.

+0

Rõ ràng, việc sử dụng các tham số chuỗi truy vấn là xấu. Xem http://stackoverflow.com/a/13377291/637609 –

0

Bạn có thể đánh lừa trình duyệt vào suy nghĩ đó là một kiểu mới mỗi thứ hai bởi timestamping CSS của bạn:

<link rel="stylesheet" type="text/css" href="style.css?<?php echo date('l jS \of F Y h:i:s A'); ?>" /> 

Mà sẽ cung cấp cho bạn điều này:

<link rel="stylesheet" type="text/css" href="style.css?Thursday 24th of April 2008 04:45:21 PM" /> 

Trích từ: Can We Prevent CSS Caching?

+0

Rõ ràng, việc sử dụng tham số chuỗi truy vấn là xấu. Xem http: // stackoverflow.com/a/13377291/637609 –

1

Bạn có thể nối thêm một chuỗi truy vấn duy nhất, mặc dù điều này sẽ sử dụng băng thông.

Bạn có thể đổi tên file CSS của bạn mỗi khi bạn thực hiện thay đổi, IE:

chính-v1.css chính-v2.css chính-v3.css

Và sau đó lại tham khảo nó trong các trang của bạn. Điều này tiết kiệm băng thông và buộc các trình duyệt tải lại nó.

+0

'main.css? V1' sẽ sử dụng băng thông nhiều hơn' main-v1.css' như thế nào? (Tôi đoán tôi đã đọc sai câu trả lời của bạn.) – jensgram

+0

main.css? V1 thực sự giống nhau, ý tôi là để đặt dữ liệu, nó sẽ tải nó mỗi lần, khi bạn chỉ cần tải khi có thay đổi. Đặt tên tệp css khác nhau trên mỗi thay đổi hoặc thêm chuỗi truy vấn của số phiên bản là 2 cách tốt nhất. –

+0

Rõ ràng, việc sử dụng các tham số chuỗi truy vấn là xấu. Xem http://stackoverflow.com/a/13377291/637609 –