Kami ingin menyimpan kerusakan pada penerapan produksi, tetapi tidak membuang banyak waktu untuk mencari tahu sistem untuk melakukannya. Pikiran saya adalah menerapkan param di akhir file css dan js dengan nomor versi saat ini:
<link rel="stylesheet" href="base_url.com/file.css?v=1.123"/>
Dua pertanyaan: Apakah ini akan merusak cache secara efektif? Akankah param menyebabkan browser tidak pernah menyimpan respons dari url itu karena param menunjukkan bahwa ini adalah konten dinamis?
sumber
<link rel="stylesheet" href="style.css?v=1487935578" />
Iya. Bahkan Stack Overflow menggunakan metode ini, meskipun saya ingat bahwa mereka (dengan jutaan pengunjung mereka per hari dan miliaran versi dan konfigurasi klien dan proxy yang berbeda) memiliki beberapa kasus tepi yang aneh bahkan ini tidak cukup untuk memecahkan cache. Tetapi asumsi umumnya adalah bahwa ini akan berhasil, dan merupakan metode yang cocok untuk menghentikan caching pada klien.
Tidak. Parameter tidak akan mengubah kebijakan caching; header caching yang dikirim oleh server masih berlaku, dan jika tidak terkirim, browser default.
sumber
/static/v22/file.css
, karena Anda dapat melakukan banyak file dengan mengganti nama folder tunggal, misalnya/static/v23/file.css
dan/static/v23/mystuff.js
Lebih aman untuk memasukkan nomor versi pada nama file yang sebenarnya. Hal ini memungkinkan beberapa versi ada sekaligus sehingga Anda dapat meluncurkan versi baru dan jika halaman HTML yang di-cache masih ada yang meminta versi lama, mereka akan mendapatkan versi yang sesuai dengan HTML-nya.
Perhatikan, dalam salah satu penerapan berversi terbesar di mana pun di internet, jQuery menggunakan nomor versi dalam nama file yang sebenarnya dan dengan aman memungkinkan beberapa versi untuk hidup berdampingan tanpa logika sisi server khusus (setiap versi hanyalah file yang berbeda).
Ini merusak cache sekali ketika Anda menyebarkan halaman baru dan file baru yang ditautkan (yang Anda inginkan) dan sejak saat itu versi tersebut dapat di-cache secara efektif (yang juga Anda inginkan).
sumber
Seperti yang dikatakan orang lain, perusakan cache dengan parameter kueri biasanya dianggap sebagai Ide Buruk (tm), dan sudah lama sekali. Lebih baik mencerminkan versi dalam nama file. Boilerplate Html5 merekomendasikan penggunaan string kueri, antara lain.
Meskipun demikian, dari rekomendasi yang saya lihat yang mengutip sebuah sumber, semuanya tampaknya mengambil kebijaksanaan mereka dari artikel tahun 2008 oleh Steve Souders. Kesimpulannya didasarkan pada perilaku proxy pada saat itu, dan mungkin relevan atau tidak saat ini. Namun, jika tidak ada informasi terkini, mengubah nama file adalah opsi yang aman.
sumber
Ini akan merusak cache sekali, setelah klien mengunduh sumber daya, setiap respons lain akan disajikan dari cache klien kecuali:
sumber
Secara umum ini seharusnya baik-baik saja, tetapi mungkin ini tidak berfungsi jika ada cache perantara (proxy) yang dikonfigurasi untuk mengabaikan parameter permintaan.
Misalnya, jika Anda menyajikan konten statis melalui Akamai CDN, ini dapat dikonfigurasi untuk mengabaikan parameter permintaan guna mencegah perusakan cache menggunakan metode ini.
sumber
Ini sangat bergantung pada seberapa kuat Anda menginginkan caching Anda. Misalnya, server proxy squid (dan mungkin yang lain) secara default tidak menyimpan URL yang disajikan dengan querystring - setidaknya, itu terjadi ketika artikel itu ditulis. Jika Anda tidak keberatan dengan kasus penggunaan tertentu yang menyebabkan kehilangan cache yang tidak perlu, lanjutkan dengan parameter kueri. Tetapi sangat mudah untuk mengatur skema perusak cache berbasis nama file yang menghindari masalah ini.
sumber
Temukan perbandingan 2 teknik (string kueri vs nama file) di sini :
Versi sebagai string kueri memiliki dua masalah.
sumber
Pendekatan serupa lainnya adalah menggunakan htaccess mod_rewrite untuk mengabaikan bagian jalur saat menyajikan file. Halaman indeks Anda yang tidak pernah di-cache mereferensikan jalur terbaru ke file.
Dari perspektif pengembangan, semudah menggunakan params untuk nomor versi, tetapi sekuat pendekatan nama file.
Gunakan bagian jalur yang diabaikan untuk nomor versi, dan server mengabaikannya dan menyajikan file yang tidak di-cache.
1.2.3/css/styles.css
menyajikan file yang sama seperticss/styles.css
sejak direktori pertama dihapus dan diabaikan oleh file htaccessTermasuk file berversi
Perhatikan bahwa pendekatan ini berarti Anda perlu menonaktifkan cache halaman indeks Anda - Menggunakan tag <meta> untuk menonaktifkan cache di semua browser?
file .htaccess
Anda dapat mengambil pendekatan yang sama pada platform server apa pun yang memungkinkan penulisan ulang url
(rewrite condition diadaptasi dari mod_rewrite - rewrite directory ke query string kecuali / #! / )
... dan jika Anda memerlukan perusakan cache untuk halaman indeks / titik masuk situs, Anda selalu dapat menggunakan JavaSript untuk menyegarkannya.
sumber
sumber
sumber
Semoga ini bisa membantu Anda untuk menyuntikkan file JS eksternal
Sumber - Kode Cachebuster di JavaScript
sumber