如果有個網站24小時都有人在使用, 沒有明顯的尖峰或離峰時段, 假如想更新前端的javascript的部份, 因為js會呼叫後端某個web api, 所以當這個api做了一些修改, 比如需要傳入的參數有所變動, 故前端的js也要配合調整。假如現在已經有某個使用者在線上, 他瀏覽器載入的是更新前的js, 而我現在一但做了更新, 假設我更新的這段時間他始終都沒有離開目前的頁面, 那麼他在頁面上觸發了js並呼叫api (js傳舊的參數格式), 但此時的api所接受的參數已經跟先前不一樣了, 所以造成錯誤。所以這種問題有什麼辦法處理?
我想到的解法: 後端appi返回error到前端, 前端js做相對應的處理, 比如顯示: 很抱歉, 系統更新, 請重新登入 (或是自動導到首頁讓他重新再進到他原本所在的頁面來更新裡面的js程式, 或是用js來自動"強制"刷新當前的頁面達到重新下載新的js)
雖然這樣還是會讓使用者有些不方便, 但至少有做正確的回應, 否則js的出錯將導致頁面無任何反應, 使用者反而不知道發生什麼事了, 因為怎麼按按鈕, 網頁沒有動靜。
不知大家有何想法, 謝謝
建議:
關鍵在步驟3, 我常用parentNode來處理動態元件, 您可參考,
http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml
https://javascript.info/long-polling
不知道您是否有詳細看過我的問題? 我想您可能誤解了, 但還是謝謝您
假如想更新前端的javascript的部份, 因為js會呼叫後端某個web api, 所以當這個api做了一些修改, 比如需要傳入的參數有所變動, 故前端的js也要配合調整。
沒錯啊. 要動態改變前端Javascript來配合修正後端API參數. 也就是要動態修正實體DOM.
我懂你的意思了, 雖然感覺有一點工程浩大, 我也許暫時不會用這種做法, 不過這也是一種思路, 謝謝分享
不會工程浩大, 就幾十行程式碼吧, 但這是正路. 我有一個案子是這樣做的. 只是不是修正API, 但還是動態修正實體DOM中的Javascript.
應該說, 我本來只是想單純解決一個頁面呼叫api的問題, 但若採用你這種方式, 就變成是影響到整個網站, 影響範圍一下就變這很大, 這樣值得嗎? 想必是需要通盤思考是否要這麼做。
此外, 一但這麼做的話, 大量的使用者從瀏覽器上的頁面對伺服器發出long polling 或 setInterval, 這對server來說, 會是不小的效能負擔。是不是本末倒置了呢?
您的需求本來就是long polling. 而我提的方案是stateless, 基本上對server的負擔很輕微, 但是不是會對server造成負擔,要看:
以reactive的方式取代long polling:
基本來說,如果你這個問題比較難處理。
難處理的原因是,無法了解你的情境是如何的。
正常一般來說,直接更換到JS的程式碼的可能性不大。
並不是沒辦法處理,而是處理了會有安全性隱憂。
大多數而言,還是會去做判斷直接重刷頁面為主。
正規來說,你會想要變程式碼的原因。不外乎是因為變數值建立到對應的JS程式碼。
而其JS程式碼是由後端生成出來的。(目前我猜測是這樣,猜錯請見諒)
但目前的網頁寫法,能不動JS主程式碼就不動。變數值還是會利用請求的方式回傳。
這樣就不容易發生改後端要連動前端一起改。
不過我不清楚你碰到的情境是如何的。就目前而言,你說的判斷後重刷頁面或是重新登入,算是比較安全的做法。