Page level caching untuk ASP.NET 4.5 web form dan situs ASP.NET MVC 5.2 cukup mengagumkan, karena memungkinkan Anda untuk menerapkan sesuatu yang cukup kompleks; caching bertingkat, tanpa harus benar-benar memahami terlalu banyak tentang caching atau bahkan menulis banyak kode. Tetapi bagaimana jika Anda ingin menghapus halaman cache ASP.NET sebelum expire?
Ketika pengembang beralih ke halaman caching pada situs ASP.NET MVC 5.2 Hosting mereka, biasanya itu karena satu hal; kebutuhan untuk kecepatan. Ketika basis kode kita mulai untuk meminta permintaan terus-menerus untuk menyimpan data, baik itu disk atau pada database, yang tidak terlalu banyak berubah. Caching biasanya adalah hal pertama pada saat kita beralih untuk meminimalkan pada saat fetching data. ASP.NET Web Form dan ASP.NET MVC keduanya membuat ini hal yang cukup sepele untuk dilakukan dengan menyembunyikan kompleksitas penyedia Cache dibalik atribut sederhana baik halaman ASPX atau controller actions:
Contoh output halaman WebForms caching:
1 2 3 4 5 6 7 8 |
<%@ OutputCache Duration="300" VaryByParam="productId" %> ASP.net MVC controller caching: [OutputCache(Duration = 300, VaryByParam = "prodId")] public ActionResult ProductDetails(string prodId) { … } } |
Pada kode sederhana di atas, Anda akan melihat satu hal di sini. Saya telah menetapkan berakhirnya cache saya sampai dengan 300 detik. Hal ini terutama karena saya ingin konten menarik dari sumber sekarang dan kemudian hanya jika sesuatu telah berubah. Saya telah menggunakan 300 detik, tapi benar-benar tidak begitu tepat. Saya baru saja menetapkan ke sebuah nomor acak yang saya dianggap akan memenuhi kebutuhan saya.
Teryata saya tidak benar-benar menggunakan cache sesuai dengan skenario yang utama adalah selama periode di mana situs saya tidak diperbarui, dan konten hanya berubah sekali setiap beberapa hari / minggu / bulan. Tools ASP.NET mencoba untuk memungkinkan situasi ini dengan memiliki dukungan untuk penyedia seperti SqlCacheDependency Anda dapat menambah aplikasi Anda. Namun, Provider SQL Cache ataupun CustomCacheProvider tidak menyediakan control yang Anda inginkan: bisa meremove halaman lewat program, control, action atau child-action level cached pages. Anda dapat memberitahu runtime untuk menghapus halaman cache dan kontrol hanya dengan menggunakan API rekursif sangat sederhana yang mengacu pada relative URL itu.
1 2 3 4 5 6 |
// remove any webforms cached item with the wildcard default.aspx* HttpResponse.RemoveOutputCacheItem("/default.aspx"); // just remove the webforms product page with the prodId=1234 param HttpResponse.RemoveOutputCacheItem("/product.aspx?prodId=1234"); // remove my MVC controller action's output HttpResponse.RemoveOutputCacheItem(Url.Action("details", "product", new { id = 1234 })); |
Anda akan melihat MVC page cache reference saya menggunakan Url.Action helper dan saya merekomendasikan hal ini. Karena menggunakan routing MVC yang sama sebagai penyedia Cache – biasanya mengambil rute pertama yang ditemukan. Menggunakan helper Url.Action berarti Url Anda disediakan untuk mengikuti jalan yang sama secara terbalik dengan penyedia cache. Untuk MVC child actions saat ini belum ada cara yang saya tahu untuk membersihkan cache kontrol individu. MVC child actions disimpan dalam ChildActionCache. Untuk menghapus seluruh MVC child actions , Anda dapat melakukan hal berikut:
1 |
OutputCacheAttribute.ChildActionCache = MemoryCache baru ("NewRandomStringNameToClearTheCache"); |
Jelas ini adalah pendekatan yang cukup agresif, tetapi jika Anda ingin melakukan hal ini, cobalah Open Project source MVC Doughnut caching.