Burada görünüm katmanında oluşan fragment caching'u arıyorsunuz. Parçalanmış önbelleğe alma ve depolanan içeriklerin sona ermesi şaşırtıcı derecede kolaydır. Bu Tabii
<% cache do %>
<ul>
<% @books.each do |book| %>
<li><%= book.name %></li>
<% end %>
</ul>
<% end %>
: Sen kitap listesi var, bu yüzden senin görünümü böyle biraz görünüyor diyelim:
<ul>
<% @books.each do |book| %>
<li><%= book.name %></li>
<% end %>
</ul>
basitçe cache
alanına kaydırmak sadece bu biraz önbelleğe etkinleştirmek için Önbelleğe isim vermez ya da onunla gerçekten özel bir şey yapmaz ... Rails bu önbellek parçacığı için otomatik olarak benzersiz bir isim seçerse, gerçekten yardımcı olmaz. Daha iyisini yapabiliriz. DHH'nin key-based cache expiration tekniğini kullanalım ve önbelleğe içeriğiyle ilgili bir isim verelim.
Argümanların önbelleğe geçirilmesi, sağlanan argümanlardan önbellek anahtarını oluşturur. Dizeler doğrudan iletilir - burada, önbellek her zaman 'kitap listesi' ile başlatılacaktır. Bu, önbellek çakışmalarının, aynı içeriği önbelleğe alabileceğiniz başka yerler ile, ancak farklı bir görünümle engellenmesidir. @books dizisinin her bir üyesi için Rails, ActiveRecord nesneleri için cache_key
'u arayacaktır: Bu, nesnesinin son güncellendiği zaman, modelinden ve kimliğinden oluşan bir dize verir.
Bu, nesneyi güncelleştirdiğinizde, bu bölümün önbellek anahtarının değişeceği anlamına gelir. Diğer bir deyişle, otomatik olarak geçerlilik süresi sona ermektedir - bir kitap güncellendiğinde, bu önbellek bildirimi varolmayan bir anahtar arayacak, var olmadığı sonucuna varacak ve yeni içerikle doldurulacaktır. Eski, eski içerik, bellek ya da yaş kısıtlamaları tarafından tahliye edilene kadar önbellek deposunuzda durur (bu işlem otomatik olarak yapılır).
Bu tekniği bir dizi üretim uygulamasında kullanıyorum ve harika çalışıyor. Daha fazla bilgi için, 37signals post ve Raylar'daki genel önbellek bilgileri için Ruby on Rails caching guide'a bakın.
+1 @books koleksiyonunu splatting üzerinde. Bunu hiç düşünmemiştim, genellikle tüm tablodaki en son güncellenen kitap kaydını alıp – cpuguy83
kullanın. Ayrıca her bir kitabı da değiştirmelisiniz, böylece değiştirilen bir kitap tüm önbelleği kırmaz. – cpuguy83