當進行網頁製作時,客戶端/瀏覽器決定是否更新文件,如圖像或.css或.js,或者是否從緩存中獲取。ASP.NET:如何執行Web靜態文件的重新加載
在.aspx頁面的情況下,它是決定的服務器。
當然,在IIS級別上或者也使用一些HttpModule技術,我可以更改請求的標頭以告訴客戶端應該緩存文件的時間和長度。
現在,我確實有一個網站,其中.aspx與相應的.js結伴而行。所以,也許我在.js中有一些訪問.aspx中元素的jQuery代碼。如果我從.aspx中刪除該元素,我也會修改.js。如果用戶轉到我的頁面,他會得到新的.aspx,但他仍然可能會得到舊的.js,導致有趣的效果。
我的網站使用大量的腳本和大量的圖像。出於性能原因,我在IIS中配置了這些文件「永不」過期。
現在,文件不時發生變化,我想確保用戶獲得更新文件。
在一開始,我通過重命名文件來幫助自己。所以,我有SkriptV1.js和SkriptV2.js等等。這是關於最糟糕的選擇,因爲存儲庫歷史記錄已損壞,我需要調整引用和文件名。
現在,我在這裏進行了改進,僅使用Skript.js?v = 1或Skript.js?v = 2更改了引用。 這會強制客戶端刷新文件。它工作正常,但我仍然需要修改引用。
現在,有進一步改善這裏是這樣的:
<script type='text/javascript' src='../scripts/<%# GetScriptLastModified("MyScript.js") %>'></script>
因此, 「GetScriptLastModified」 將追加V =參數是這樣的:
protected string GetScriptLastModified(string FileName)
{
string File4Info = System.Threading.Thread.GetDomain().BaseDirectory + @"scripts\" + FileName;
System.IO.FileInfo fileInfo = new System.IO.FileInfo(File4Info);
return FileName + "?v=" + fileInfo.LastWriteTime.GetHashCode().ToString();
}
因此,渲染。 js-Link看起來像這樣的客戶端:
<script type='text/javascript' src='/scripts/GamesCharts.js?v=1377815076'></script>
鏈接將改變每次,當我uplo廣告一個新版本,我可以確定,當我改變它時,用戶立即得到一個新的腳本或圖像。
現在有兩個問題: a)有沒有更好的方法來實現這個目標? b)如果沒有:有人猜測服務器的性能開銷有多大?在一個頁面上可以容易地創建50個版本化的元素,因此對於一個.aspx,GetScriptLastModified將被調用50次。
期待討論:)