Apa aturan keras dan cepat untuk Kontrol Cache?


15

Pengakuan : situs yang saya kelola memiliki aturan berbeda untuk Kontrol Cache sebagian besar didasarkan pada konfigurasi default server yang ditindaklanjuti dengan rekomendasi dari Page Speed & Y-Slow Firefox plug-in dan tampilan Sumber Daya Jaringan di Google Tracer Kecepatan . Kontrol Cache diatur ke privat / publik, tergantung pada apa yang mereka katakan, header ETag / Last-Modified hanya dipermainkan jika Y-Slow menyarankan ada sesuatu yang salah dan Vary-Accept-Encoding tampaknya diperlukan ketika secara manual gziping file untuk Amazon CloudFront.

Ketika membaca materi tentang pilihan yang berbeda dan apa yang mereka lakukan tampaknya ada informasi yang saling bertentangan, aturan untuk proxy yang rusak dan konfigurasi kultus kargo . Setiap informasi resmi yang disediakan oleh alat analisis yang disebutkan di atas cukup tidak dapat diakses karena berkaitan dengan setiap topik secara individu alih-alih sebagai strategi terpadu (sehingga tidak ada referensi silang teknik).

Sebagai contoh, tampaknya tidak masuk akal bahwa alat analisis kecepatan menilai situs dengan ETag sama dengan situs tanpa mereka jika mereka dimaksudkan untuk membantu dengan caching.

Apa aturan keras dan cepat untuk strategi agnostic Cache Control platform?

EDIT:

Sebuah link yang melalui artikel Jeff Atwood menjelaskan Caching secara mendalam luar biasa.

Sebagai catatan, inilah aturan keras dan cepat:

Jika file dikompresi menggunakan GZIP, dll - gunakan "cache-control: private" sebagai proxy dapat mengembalikan versi terkompresi ke klien yang tidak mendukungnya (cache browser akan menyimpan file yang ditandai dengan cara ini). Juga ingatlah untuk memasukkan "Vary: Accept-Encoding" untuk mengatakan bahwa itu kompresibel.

Gunakan Last-Modified dalam hubungannya dengan ETag - penggunaan sabuk dan kawat gigi menyediakan kedua validator, sementara ETag didasarkan pada konten file alih-alih waktu modifikasi saja, menggunakan keduanya mencakup semua pangkalan. CATATAN: PageTest AOL memiliki pendekatan carte blanche terhadap ETag karena alasan tertentu. Jika Anda menggunakan Apache pada lebih dari satu server untuk meng-host konten yang sama, maka hapus inode yang dinyatakan secara implisit dari ETags dengan mengecualikannya dari direktif FileETag (yaitu "FileETag Ukuran MTime") kecuali Anda benar-benar menggunakan sistem file live yang sama.

Gunakan "kontrol-cache: publik" di mana pun Anda bisa - ini berarti bahwa server proxy (dan cache browser) akan mengembalikan konten Anda, bahkan jika halaman lainnya memerlukan otentikasi HTTP, dll.

Jawaban:


8

Pertama, jangan singkirkan ETag seperti kata Yahoo, kecuali Anda menggunakan server farm / cluster. Selama file yang sama selalu mengembalikan ETag yang sama ketika tidak berubah, maka itu adalah arahan yang sangat berguna.

Adapun header lainnya, praktik terbaik Yahoo menyarankan untuk mengatur Expiresheader masa depan yang jauh untuk file statis, gunakan Cache-Controluntuk konten dinamis. Namun Cache-controlsangat baik untuk konten statis (tidak ada perbedaan di antara mereka).

Ketika Anda mengubah file statis yang di-cache, Anda perlu mengubah nama file, atau menambahkan parameter unik hingga akhir, mis example.com/styles.css?v=2. Mengubah nama file yang sebenarnya lebih disukai, seperti dicatat dalam komentar di bawah ini.

Secara kebetulan, Anda dapat mengedit aturan YSlow sesuai keinginan Anda, untuk menghapus aturan Etag dan menambahkan domain Anda sendiri sebagai CDN. Artikel ini juga merupakan bacaan yang bagus: Masalah Yahoo Bukan Masalah Anda


ETag yang masuk akal di Apache dengan melakukan "FileETag MTime Size" daripada default yang mencakup inode (per FS sehingga tidak dapat diandalkan) pada Y-Slow. Namun rekomendasi tentang praktik terbaik Yahoo sedikit membingungkan jika dibandingkan dengan Page Speed. Misalnya dikatakan menggunakan Cache-Control hanya pada halaman dinamis (seperti yang Anda sarankan), namun Google menyarankan menggunakan Cache-Control: publik pada CSS statis dan Cache-Control: pribadi pada file GZipped Amazon Cloudfront secara manual.
Metalshark

Sulit untuk mengetahui apa yang harus dilakukan dari saran untuk proxy. Google hanya mengatakan "Beberapa proxy publik memiliki bug ..." tetapi tidak mengatakan seberapa lazimnya hal ini. Tidak disarankan untuk mengatur tajuk Vary: Accept-Encoding, lihat bagian bawah code.google.com/speed/page-speed/docs/caching.html
DisgruntledGoat

Menambahkan parameter kueri menonaktifkan cache file itu sepenuhnya di beberapa browser. Jadi, Anda mungkin ingin menggunakan pendekatan "ubah nama file", sepertiexample.com/style_v2.css
Evgeny

@ Evgeny: Browser mana? Saya pernah mendengar ini sebelumnya tetapi saya belum pernah melihat browser yang sebenarnya tidak men-cache file (terutama jika Anda memiliki header yang tepat).
DisgruntledGoat

@DisgruntledGoat sebenarnya, setelah beberapa penggalian tampaknya itu adalah peninggalan dari era http / 1.0 di mana itu adalah bagian dari spesifikasi yang benar-benar mengatakan agen pengguna tidak boleh men-cache aset yang memiliki string kueri. Di sisi lain, code.google.com/speed/page-speed/docs/caching.html menyatakan bahwa itu adalah proksi (squid <3.0) yang tidak akan men-cache aset dan dengan demikian menggunakan string kueri untuk penghilang cache tidak disarankan.
Evgeny

0

Mengubah tajuk permintaan sumber daya Anda untuk menggunakan caching Bagi kebanyakan orang, cara melakukan caching ebable adalah dengan menambahkan beberapa kode ke file bernama .htaccess di host web / server Anda.

Ini berarti pergi ke pengelola file (atau ke mana pun Anda pergi untuk menambah atau mengunggah file) di hosting Anda.

File .htaccess mengontrol banyak hal penting untuk situs Anda. Jika Anda tidak terbiasa dengan file .htaccess, harap baca artikel saya yang bekerja dengan .htaccess untuk mengetahui bagaimana caranya sebelum mengubahnya.

Kode di bawah ini memberi tahu browser apa yang harus di-cache dan berapa lama untuk "mengingatnya". Itu harus ditambahkan ke bagian atas file .htaccess Anda.

## 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 ##

Simpan file .htaccess lalu segarkan laman web Anda.

Sumber:
https://varvy.com/pagespeed/leverage-browser-caching.html


Hampir setiap contoh ExpiresByTypearahan yang saya lihat termasuk tipe mime text/x-javascript- apakah server Anda benar-benar merespons dengan tipe konten ini ?! (Contoh blind copy / paste IMO.)
MrWhite
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.