Các quy tắc cứng và nhanh cho Kiểm soát bộ đệm là gì?


15

Thú nhận : các trang web tôi duy trì có các quy tắc khác nhau cho Kiểm soát bộ đệm chủ yếu dựa trên cấu hình mặc định của máy chủ được theo dõi với các đề xuất từ trình cắm Firefox Tốc độ & Y-Slow Firefox và chế độ xem Tài nguyên mạng trong Trình theo dõi tốc độ của Google . Kiểm soát bộ nhớ cache được đặt thành riêng tư / công khai tùy thuộc vào những gì họ nói phải làm, các tiêu đề của ETag / Sửa đổi lần cuối chỉ được sửa đổi nếu Y-Slow cho thấy có gì đó không đúng và Mã hóa Vary-Accept-Encoding có vẻ cần thiết khi tải tệp thủ công cho Amazon Đám mây.

Khi đọc qua các tài liệu về các tùy chọn khác nhau và những gì họ làm dường như có thông tin mâu thuẫn, các quy tắc cho các proxy bị hỏng và cấu hình sùng bái hàng hóa . Bất kỳ thông tin chính thức nào được cung cấp bởi các công cụ phân tích được đề cập ở trên đều không thể truy cập được vì nó liên quan đến từng chủ đề thay vì như một chiến lược thống nhất (vì vậy không có tham chiếu chéo các kỹ thuật).

Ví dụ, dường như không có ý nghĩa rằng các công cụ phân tích tốc độ đánh giá một trang web có ETag giống như một trang web không có chúng nếu chúng có ý nghĩa giúp đỡ trong bộ nhớ đệm.

Các quy tắc cứng và nhanh cho chiến lược Kiểm soát bộ nhớ cache bất khả tri là gì?

BIÊN TẬP:

Một liên kết thông qua bài viết của Jeff Atwood giải thích về bộ nhớ sâu.

Đối với hồ sơ mặc dù đây là các quy tắc cứng và nhanh:

Nếu tệp được nén bằng GZIP, v.v. - hãy sử dụng "bộ điều khiển bộ đệm: riêng tư" làm proxy có thể trả lại phiên bản nén cho máy khách không hỗ trợ (mặc dù bộ đệm của trình duyệt sẽ giữ các tệp được đánh dấu theo cách này). Ngoài ra, hãy nhớ bao gồm một "Vary: Chấp nhận mã hóa" để nói rằng nó có thể nén được.

Sử dụng Sửa đổi lần cuối cùng với ETag - sử dụng đai và niềng răng cung cấp cả hai trình xác nhận, trong khi ETag dựa trên nội dung tệp thay vì thời gian sửa đổi một mình, sử dụng cả hai cơ sở. LƯU Ý: PageTest của AOL có cách tiếp cận carte chống lại ETags vì một số lý do. Nếu bạn đang sử dụng Apache trên nhiều máy chủ để lưu trữ cùng một nội dung thì hãy xóa mã được khai báo ngầm khỏi ETags bằng cách loại trừ nó khỏi chỉ thị FileETag (tức là "FileETag MTime Size") trừ khi bạn thực sự sử dụng cùng một hệ thống tệp trực tiếp.

Sử dụng "kiểm soát bộ đệm: công khai" bất cứ nơi nào bạn có thể - điều này có nghĩa là các máy chủ proxy (và bộ đệm của trình duyệt) sẽ trả về nội dung của bạn ngay cả khi phần còn lại của trang cần xác thực HTTP, v.v.

Câu trả lời:


8

Đầu tiên, đừng loại bỏ ETag như Yahoo nói, trừ khi bạn đang sử dụng cụm máy chủ / cụm máy chủ. Miễn là cùng một tệp luôn trả về cùng một ETag khi nó không thay đổi, thì đó là một chỉ thị rất hữu ích.

Đối với các tiêu đề khác, các thực tiễn tốt nhất của Yahoo đề nghị đặt Expirestiêu đề tương lai xa cho các tệp tĩnh, sử dụng Cache-Controlcho nội dung động. Tuy nhiên Cache-controllà hoàn toàn tốt cho nội dung tĩnh (khá nhiều không có sự khác biệt giữa chúng).

Khi bạn thay đổi lưu trữ các tập tin tĩnh, bạn sẽ cần phải thay đổi tên tập tin, hoặc thêm một tham số duy nhất để cuối cùng, ví dụ example.com/styles.css?v=2. Thay đổi tên tệp thực tế được ưa thích mặc dù, như đã lưu ý trong các ý kiến ​​dưới đây.

Ngẫu nhiên, bạn có thể chỉnh sửa các quy tắc YSlow theo ý thích của mình, để xóa quy tắc Etag và thêm tên miền của riêng bạn dưới dạng CDN. Bài viết này cũng là một bài đọc tốt: Vấn đề của Yahoo không phải là vấn đề của bạn


ETag có ý nghĩa trong Apache bằng cách thực hiện "Kích thước MTime của FileETag" thay vì mặc định bao gồm inode (theo mỗi FS nên không đáng tin cậy) trên Y-Slow. Tuy nhiên, các khuyến nghị về các thực tiễn tốt nhất của Yahoo hơi khó hiểu khi so sánh với Tốc độ của Trang. Chẳng hạn, nó nói chỉ sử dụng Kiểm soát bộ đệm trên các trang động (như bạn cũng đề xuất), nhưng Google đề xuất sử dụng Kiểm soát bộ đệm: công khai trên CSS tĩnh và Kiểm soát bộ đệm: riêng tư trên các tệp Amazon Cloudfront thủ công.
Metalshark

Thật khó để biết phải làm gì với lời khuyên đó cho các proxy. Google chỉ nói "Một số proxy công cộng có lỗi ..." nhưng không nói mức độ phổ biến của nó. Bạn nên đặt tiêu đề Vary: Accept-Encoding, xem phần dưới cùng của code.google.com/speed/page-speed/docs/caching.html
DisgruntledGoat

Thêm một tham số truy vấn sẽ vô hiệu hóa bộ nhớ đệm của tệp đó trong một số trình duyệt. Vì vậy, thay vào đó, bạn có thể muốn sử dụng phương pháp "thay đổi tên tệp", nhưexample.com/style_v2.css
Evgeny

@Evgeny: Trình duyệt nào? Tôi đã nghe điều này trước đây nhưng tôi chưa bao giờ thấy một trình duyệt thực sự không lưu trữ tệp (đặc biệt là nếu bạn có tiêu đề đúng).
DisgruntledGoat

@DisgruntledGoat thực sự, sau khi đào bới, có vẻ như đó là một di tích từ thời đại http / 1.0, nơi nó là một phần của thông số thực sự nói rằng tác nhân người dùng không được lưu trữ các tài sản có chuỗi truy vấn. Mặt khác, code.google.com/speed/page-speed/docs/caching.html nói rằng đó là proxy (squid <3.0) sẽ không lưu trữ tài sản và do đó sử dụng chuỗi truy vấn để xóa bộ đệm.
Evgeny

0

Thay đổi tiêu đề yêu cầu của tài nguyên của bạn để sử dụng bộ đệm ẩn Đối với hầu hết mọi người, cách để lưu vào bộ đệm ẩn là thêm một số mã vào tệp có tên .htaccess trên máy chủ / máy chủ web của bạn.

Điều này có nghĩa là đi đến trình quản lý tệp (hoặc bất cứ nơi nào bạn đến để thêm hoặc tải tệp lên) trên webhost của mình.

Tệp .htaccess kiểm soát nhiều thứ quan trọng cho trang web của bạn. Nếu bạn không quen thuộc với tệp .htaccess, vui lòng đọc bài viết của tôi với .htaccess để biết một số cách biết trước khi thay đổi nó.

Đoạn mã dưới đây cho trình duyệt biết những gì cần lưu trữ và thời gian "ghi nhớ" nó. Nó nên được thêm vào đầu tập tin .htaccess của bạn.

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

Lưu tệp .htaccess và sau đó làm mới trang web của bạn.

Nguồn:
https://varvy.com/pagespeed/leenses-browser-caching.html


Gần như mọi ví dụ về các ExpiresByTypechỉ thị tôi thấy đều bao gồm loại mime text/x-javascript- máy chủ của bạn có thực sự phản hồi với loại nội dung này không?! (Một ví dụ về sao chép / dán mù IMO.)
MrWhite
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.