16/02/2010
Flash’ta Cache’ten Okuma Sorunu
Sayfanızın içinde bir swf’niz ve içeriği sık sık güncelleniyor. Müşteriniz bakıyor ama değişiklikleri göremiyor. Çünkü cache’ten okuyor.
Bu durumu engellemek için çözüm basit:
'movie', '/swf/banner',</code> olan kodunuzun sonuna o anki tarihi <code>'<%=DateTime.Now.ToString()%>'
ile aşağıdaki gibi yazdırıyorsunuz:
'movie', '/swf/banner'?<%=DateTime.Now.ToString() %>,
Param kısmında da aynı şeyi yazmak gerekiyor:
<param name="movie" value="/swf/banner.swf'?<%=DateTime.Now.ToString() %>
Bunun html çıktısı da şöyle oluyor:
'movie', '/swf/banner?16.02.2010 18:10:29',
Böylece güncellemeleriniz anlık görüntülenebiliyor:)
Not: Flash AC_RunActiveContent.js kullanılarak, eklenmiştir.
EKLEME: (17 Şubat 2010) Yorumlardan sonra, Kemal‘in de önerisiyle kodu <%=DateTime.Now.ToString("ddMMyyyyHMS") %>
şeklinde yazmanın daha doğru olacağını öğrendim. Sonucu aradalarda nokta olmadan çıkartıyormuş.
‘ın çıktısı bazı durumlar içerdiği karakterler yüzünden sorun çıkarabilir.
Bunun yerine timestamp yani sadece rakamlardan oluşan bir string yada random bir değer kullanılmalı.
ASP Timestamp:
http://snipplr.com/view/6607/quick-asp-timestamp/
oh! be!!111
Bilgilendirmen için teşekkür ederim Berkay.
Eğer istemci (eski) bir proxy sunucusunun arkasında ise [ofis vb. gibi yerlerde rastlanıyor bunlara genelde] – kaynağın sonuna ?timestamp koyma numarası çalışmıyabiliyor. (Ancak çok ufak bir yüzde için diyelim)
Bizim ürettiğimiz çözüm ise kaynak dosyalarının, (css, js ‘de buna dahil) bulunduğu dosyayı /kaynak/HASHSTRING/abc.css gibi yapılandırmak. Aslında abc.css /kaynak/abc.css altında, ancak, uygulama her boot ettiği zaman her kaynağın MD5’sumunu alıp, bunu bir map içinde tutarak, jsp’ler render edilirken ufak bir taglib ile pathlara bu ürettiğimiz hashstring’i sokmak, diğer taraftan da sunucu tarafında /kaynak/*/*.css’i /kaynak/*.css’e yönlendirmek. Bu şekilde gönderdiğimiz css,js’lerin expires, ve cache-control header’ları ile yine oynayarak, örneğin 1 sene expires set ederek – kullanıcıya göndermek. Developer flash, css veya js’yi değiştirdiği zaman – içinde durduğu folder’i da değiştiriyor, cached bir instance varsa invalidate oluyor ve yenisi geliyor.