2011-09-14 36 views
1

我有一個用PHP編寫的webapp,我用header()函數生成頭文件。automate http expires

問題是,當我更改我的應用程序的JavaScript代碼時,在客戶端,舊的JavaScript將不會執行,因爲緩存到客戶端瀏覽器。

如何自動化頭過期的過程?我認爲每次修改javascript代碼都必須比修改該函數更好。

+0

這是生產中還是開發時的問題? –

回答

2

唯一的防彈解決辦法是改變服務器端資源的文件名:

來源:雅虎Best Practices for Speeding Up Your Web Site

請記住,如果你使用一個遙遠的未來Expires頭你有每當組件更改時更改組件的文件名。在Yahoo!我們經常使這一步成爲構建過程的一部分:版本號嵌入到組件的文件名中[...]

當然,這個過程必須是自動化的。我們將JavaScript文件內容哈希附加到文件名中。

0

既然你沒有提供太多細節只是一般的指針:

通常你可以在Web服務器配置Expires和其他頭PARAMS - 無論是在全球和/或每「文件夾」等

您可以讓JS文件在1小時後過期...這樣,您就會知道在更改1小時後,所有客戶端都將使用新的JS文件...

如果您需要更改生效即使對於目前處於活動狀態的客戶來說,也不會有太大的幫助 - 你將不得不做一些AJAX魔術......

1

將每個版本的URI更改爲腳本。

這可以通過添加查詢字符串來完成。例如,您可以通過從您的版本控制系統獲取版本號並將其插入到您的模板中來自動執行此操作。

這將允許您有很長的到期時間(用於優化緩存),並且每次發佈新版本時仍會獲得新鮮的JavaScript(只要HTML文檔未從緩存中加載(但它們傾向於與JS相比,緩存時間短))。

1

版本JavaScript文件的最佳方式是在其文件名中包含版本號。當你修改代碼時,你會碰撞版本號,然後你修改任何包含JS文件的網頁來引用新的文件名。然後你只需要自己過期網頁,他們會自動引用新的JS文件。 JS文件可能會有很長的到期時間(數月或數年),因此您可以獲得最大的緩存效益。

這也確保您獲得一組一致的JS文件。

這是jQuery如何使用版本控制。