了解顧客為何看見不同版本
Service Worker 位於受其控制的網頁與部分網絡請求之間。視乎應用設計,它可提供已快取頁面或資源,讓部分體驗在網絡較弱時仍可運作。但部署後並非所有開啟中的分頁都即時換成新版。瀏覽器文件說明,新版背景安裝後,舊版仍控制開啟頁面時,新版會等待。這個等待狀態有助保持正在使用頁面的一致性。顧客若正填寫預約或訂單,這可能有益,前提是舊頁面與伺服器仍能配合。
瀏覽器會按生命週期檢查 Worker 更新,包括進入其範圍內的頁面,以及 MDN 描述在一段時間後觸發的事件。不要承諾新 JavaScript 檔案一發佈,所有裝置便同步更新。有些顧客可能離線,有些長時間開著分頁,也有些從未安裝 Worker。這些是不同的測試狀態。先記錄實際 Worker 腳本路徑、控制範圍及註冊方式;若團隊想當然認為每個公開頁都受控,便無法判斷哪些顧客流程會受影響。
瀏覽器重新載入,不等於安全更新。文件解釋,刷新受控頁面時,舊 Worker 仍可能在導覽期間控制它,因為新回應到達前舊頁未完全消失。同時,新啟用的 Worker 可能改變舊版程式頁面往後請求的處理方法。必須規劃新舊版本交接的短暫時段。未決定未儲存欄位、已提交請求及顧客下一步如何處理前,不應在結帳表格旁只放一個「立即刷新」按鈕。
按顧客流程選擇更新方式
最簡單的預設做法通常是讓新版等待,直到受舊版控制的分頁關閉後才啟用。這避免在工作途中接管,但長時間開啟的分頁可能繼續使用舊資源。要檢視 Worker 快取甚麼,才可判斷是否可接受。若應用預先快取 HTML,或依賴相配的版本化資源組合,Chrome Workbox 指引認為重新載入提示可能合理。若導覽優先使用網絡、資源大多於使用時更新,需求又可能不同。決定應取決於實際快取策略及舊客戶端的後果,而非抽象追求即時最新。
有意設計的更新提示須說明正在發生甚麼;如中斷會造成損失,應讓顧客選擇。長表格可透過經驗證的應用機制儲存草稿,或待交易完成再更新。若沒有可靠儲存方式,應延後重新載入,並說明可稍後套用更新。提示文字須方便鍵盤及輔助科技使用者接觸,也不能遮蓋顧客正在操作的按鈕。只有當目前工作能安全恢復,才考慮自動重載。技術事件發生,不等於獲准丟棄顧客已輸入的資料。
呼叫 skipWaiting 會要求已安裝 Worker 不等舊分頁結束便啟用。啟用時呼叫 clients.claim,可讓運作中的 Worker 接管合資格頁面。這些方法有用,但不會自行遷移頁面狀態,也不保證舊 JavaScript 懂得使用新快取資源。web.dev 的生命週期指引明確提醒,skipWaiting 可能使新 Worker 處理由舊版載入頁面其後發出的請求。只有確認版本混用可行,或顧客已同意受控重載後,才使用這些方法。
維持資源與伺服器版本相容
快取名稱應反映內容及其發佈規則。安裝步驟應先取得必要資源,才把新版 Worker 視為準備就緒;啟用時可移除不再需要的快取。但若啟用時刪除全部舊資源,仍在開啟的舊頁稍後才載入的檔案可能失效。要查舊頁是否使用不可變的版本檔名、伺服器是否仍提供該檔案,以及何時可安全清理。快取清理是一項相依性決定,不應視為每次部署都要激進執行的雜務。
伺服器端亦有相容期。若顧客一直開著舊預約表格,最後提交時可能送到新部署的 API。團隊須決定該請求仍可接受、會收到可恢復的清楚錯誤,還是需要遷移。同樣,新頁面也不應在舊 Worker 仍提供快取 HTML 時,意外呼叫已移除的端點。記錄這次發佈支援哪些組合:舊頁配新伺服器、新頁配新伺服器,以及離線後回來。這些是業務流程測試,不只是 Worker 安裝測試。
不要把 Service Worker 快取當作未定義的私人顧客資料儲存處。須明確決定哪些回應可保存、多久仍有用,以及內容過時時顧客如何恢復。靜態說明頁與帳戶儀表板或結帳結果並不相同。本文聚焦更新時的連續性;私人回應的 HTTP 與快取政策仍須另行檢視。測試更新時,應在受控測試設定檔清除及檢查瀏覽器儲存,然後以已有舊 Worker 和快取的設定檔重試。只測全新安裝,無法發現升級缺陷。
演練預約頁發佈
假設一間服務公司有預約表格,顧客可能開著頁面,先與同事核對時間。某次發佈改動表格版面與 Worker 預先快取。中午有一位顧客填了一半舊表格、另一位首次打開網站,第三位剛從離線狀態回來。發佈計劃容許舊表格完成提交,伺服器保留對其資料格式的支援,並只在第一位顧客到達可安全暫停的時點顯示更新提示。新訪客取得現行資源;回來的訪客若離線資料不能同步,也有清楚恢復路徑。這是虛構測試案例,不是觀察到的成效。
讓三種使用者都走過可觀察測試。在舊分頁輸入不影響真實業務的樣本資料,在測試環境部署更新,觀察等待中的 Worker,然後只提交一次並核對預約紀錄。以全新設定檔打開同一路由,確認載入現行版本。離線設定檔則按應用承諾的離線行為操作並重新連線;檢查訊息、資料及操作仍否清晰。若有提示,分別測試接受、略過、切換分頁及稍後返回。記錄預期哪一步重載,以及未儲存輸入有否保留。
演練失敗時要找出哪項相容約定出錯。若舊表格不能提交給新 API,發佈前須保留舊端點,或提供遷移及恢復訊息。若新 Worker 已啟用,但舊頁要求已移除檔案,就讓該版本檔案繼續可用,直至舊客戶端完成。若使用者被困在過時 HTML,須修改快取與更新提示,再以已安裝舊版的設定檔重測。開發人員在自己瀏覽器取消註冊 Worker,可能只會掩蓋問題,並沒有修好顧客現有安裝。
訂出發佈驗收紀錄
每次發佈應記錄新舊 Worker 識別、腳本範圍、快取資源集合、受支援頁面與 API 組合、提示行為及所用測試設定檔。確認等待中的更新會按選定策略最終啟用,顧客按提示重載後亦能辨認目前版本。指定負責人,讓客服有途徑識別版本過時的報告。這種證據比「伺服器上的 Worker 檔案已改動」更有用,因為它顯示真實顧客工作能否跨越新舊版本交接並安全完成。
根據測試結果判斷即時更新是否值得中斷。嚴重缺陷在保障舊頁後,可能值得以審慎提示及較早啟用處理;一般外觀改動則可等待正常生命週期。兩種選擇都不是放諸四海皆準。若應用根本沒有 Service Worker,也沒有必要只為跟隨本流程而加入。業務目標是可靠的顧客旅程;快取和更新機制應服務此目標,而非代替負責人作決定。
客服報告要有足夠脈絡,才能分辨更新故障與一般網絡問題。應提供安全方法,讓員工得知畫面版本、Worker 是啟用還是等待,以及上次成功同步的時間,同時避免暴露顧客私人資料。顧客說頁面看似舊版時,應先問他正在做甚麼,再建議重新載入。若刷新後商標更新了,卻令未完成表格消失,便不是良好解決。把重複出現的舊版報告帶回下次發佈測試;原因可能是長時間開啟的分頁、快取規則,或顧客根本看不到的更新提示。
進行前先確認
- 有否同時測試已受舊版控制的分頁與全新訪客?
- 舊表格能否在新伺服器上安全完成?
- 提示重新載入時,未完成工作是否獲保存或明確延後?


