2012-07-28 101 views
3

朋友,如何避免網站使用本地緩存的JavaScript文件?

最近,我在客戶的地方託管了一個網站(使用ASP.Net開發),其中包含許多用於Rich UI交互的JavaScript內容。一切工作正常。但主要的問題是 -

當我在JavaScript文件中做了一些更改並上傳它,它不會在客戶端的地方生效,因爲有網站需要本地緩存的JavaScript文件。

那麼,我該如何避免這種情況?

有沒有什麼技術可以解決我的問題?

回答

-1

有一些技術可以避免瀏覽器使用緩存過期來緩存資源。

protected void Application_BeginRequest() 
{ 
    //NOTE: Stopping IE from being a caching whore 
    HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false); 
    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    HttpContext.Current.Response.Cache.SetNoStore(); 
    Response.Cache.SetExpires(DateTime.Now); 
    Response.Cache.SetValidUntilExpires(true); 
} 

但對於你的情況,這是不可取的,我認爲你的項目仍處於開發階段,只是避免cntrl + F5通過資源的重新加載和緩存資源被刪除並重新加載再次,你不應該執行這一補救措施因爲這會降低你的網站性能。

更簡單和更合理的解決方案是告訴您的客戶合作,並在需要查看最近網站變化時按cntrl + F5,此後當網站完成時,不需要再做任何操作,或者您可以在開發階段僅實現以上給定的代碼,並在使您的網站生效之前將其刪除。

+0

CTRL + F5是不能接受的,先生。 – Julian 2012-07-28 05:44:31

+0

這只是一個建議,上面給出的代碼可以替代地使用。 – yogi 2012-07-28 05:46:59

2

了一些研究之後,我們來到了頭的下面的列表,似乎涵蓋了大部分的瀏覽器:

在ASP.NET我們添加了這些使用下面的代碼片段:

Response.ClearHeaders(); 
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1 
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0 
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.0 

從實測:http://forums.asp.net/t/1013531.aspx


上述溶液從 here

+0

他說問題是服務器緩存,而不是客戶端緩存。我再次看到這一點(ftp上傳是可以的,ftp下載得到的是正確的文件,但http只是檢索舊版本,僅用於'.js'文件) – 6502 2012-07-28 05:37:08

1

代替具有隻是script標記加載的Javascript,將其加載動態

<script> 
    function loadScript(name) { 
     var s = document.createElement("script"); 
     s.src = name + "?" + (new Date).getTime(); 
     document.body.appendChild(s); 
    } 
    loadScript("script1"); 
    loadScript("script2"); 
</script>