當我們部署應用程序的新版本時,我們的用戶有可能仍然使用可能會導致錯誤的舊前端Java腳本代碼。每當java腳本過期時強制刷新客戶端瀏覽器
我們的應用程序是一個單一的頁面應用程序,所以人們不會刷新它很多,用戶有時會留下一段時間。所以,只要我們推新代碼,這個問題就很容易發生。
我們正在考慮可能會彈出一個刷新按鈕,這將強制他們重新加載前端緩存的代碼。
你如何正常觸發?有很多方法可以做,但也許有一個標準的方法來做到這一點?
當我們部署應用程序的新版本時,我們的用戶有可能仍然使用可能會導致錯誤的舊前端Java腳本代碼。每當java腳本過期時強制刷新客戶端瀏覽器
我們的應用程序是一個單一的頁面應用程序,所以人們不會刷新它很多,用戶有時會留下一段時間。所以,只要我們推新代碼,這個問題就很容易發生。
我們正在考慮可能會彈出一個刷新按鈕,這將強制他們重新加載前端緩存的代碼。
你如何正常觸發?有很多方法可以做,但也許有一個標準的方法來做到這一點?
我會將?<version>
添加到腳本的src中。
<script src="myFile.js?1"></script>
您可以用代碼推比如改變這個版本,所以客戶端的強制,因爲查詢字符串,採取了新的版本。
您可以使用Web Worker定期ping服務器以獲取新的代碼更改或版本號(例如從數據庫中),並在有新內容時強制刷新。如果您只是使用說,setTimeout
,那會給您更多的點播可能性。
這是semver確實派上用場的情況。你想有一個自動化的過程來更新客戶端代碼。爲了確保更新是兼容的,您應該確保有一種方法可以比較新舊代碼的版本字符串,並確定它是否是「主要」更新。對於「輕微」或「修補程序」更新,您可能可以即時更新。但是對於重大更新,在幫助用戶保存其工作之後強制完全重新加載將是明智的。
就實時更新的過程而言,您可以使用類似AMD模塊這樣的東西。您將過期模塊緩存,下載新代碼並重新初始化系統的相關部分(由新代碼執行)。
還有知道更新何時可用的問題。我建議你看看Server Sent Events。但是,如果您需要Internet Explorer支持,則可能需要使用基於setTimeout的輪詢機制或類似方法。
你實際上有兩個獨立的問題。客戶端和服務器
通常情況下,你需要使用一個版本的API。每個API請求都應以某種方式指示請求對應的版本。這通常在請求的路徑中完成,這使得路由到不同的API服務器非常容易。例如:
http://api.example.com/1.0/foo/bar
你的Web服務器可以匹配/1.0/
和路由到您的API相應的應用程序服務器。
這爲您提供了一些靈活性,允許滾動發佈過程,並且不會在您每次發佈時都強制客戶端重新加載。 (你可能有一天想要每天發佈50次,並且你的客戶不會太高興,除非你有特定的理由,否則不需要強制重新加載。)
最簡單的方法做到這一點儘可能地向後兼容API的新版本。但是,確實發生了重大變化。發生這種情況時,同時運行API服務器的兩個實例。如果您的主要數據結構發生了重大變化,或者發生了其他一些阻止此類變化的巨大變化,則需要在啓動新版本的同時停止舊版本,並強制重新加載。
你必須決定根據您的應用程序和業務條件是否它是不是每次你有一個釋放時間重新加載的要求。同樣,你可能有一天會在一天中需要50個版本,其中大部分是針對大多數客戶永遠不會看到的小問題。通常讓用戶知道新版本可用,並在他們感覺喜歡時重新加載。如果您絕對必須(由於嚴重的安全問題或主要重大更改),您可以隨時強制重新加載。
你如何做到這一點的細節是你的,但一個簡單的方法是有一個基本的JSON文件可用時,表示最新版本:
{
"apiVersion": "1.0.5"
"appVersion": "1.1.352"
}
更多的創造性,你可以讓這個文件指出是否需要殺死特定的版本,從而強制重新加載。
我認爲最簡單的方法就是不時檢查使用AJAX(取決於你有多少次更新以及它們有多關鍵),然後要求重新加載,如果有新東西 – nicovank
@nicovank什麼我們會成爲ajaxing嗎?像一個應用程序版本? – froi
[AJAX](https://fr.wikipedia.org/wiki/Ajax_(informatique))(異步JavaScript和XML)是一種從服務器獲取數據而不重新加載頁面的方式。 Google的快速搜索將幫助您瞭解更多信息。或者爲了保持簡單,只是現在重新加載頁面,如果沒有檢查是否有變化, – nicovank