日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

前端重新部署如何通知用户刷新网页?

發(fā)布時間:2024/3/24 HTML 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前端重新部署如何通知用户刷新网页? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我把我掘金的文章同步一份給CSDN?

1.目標場景

有時候上完線,用戶還停留在老的頁面,用戶不知道網(wǎng)頁重新部署了,跳轉(zhuǎn)頁面的時候有時候js連接hash變了導(dǎo)致報錯跳不過去,并且用戶體驗不到新功能。

2.思考解決方案

如何去解決這個問題 思考中...

如果后端可以配合我們的話我們可以使用webSocket 跟后端進行實時通訊,前端部署完之后,后端給個通知,前端檢測到Message進行提示,還可以在優(yōu)化一下使用EvnentSource 這個跟socket很像只不過他只能后端往前端推送消息,前端無法給后端發(fā)送,我們也不需要給后端發(fā)送。

以上方案需要后端配合,奈何公司后端都在忙,需要純前端實現(xiàn)。

重新進行思考...

根據(jù)和小伙伴的討論得出了一個方案,在項目根目錄給個json 文件,寫入一個固定的key值然后打包的時候變一下,然后代碼中輪詢?nèi)ヅ袛嗫从袥]有變化,有就提示。

果然是康老師經(jīng)典不知道。

但是寫完之后發(fā)現(xiàn)太麻煩了,需要手動配置json文件,還需要打包的時候修改,有沒有更簡單的方案, 進行第二輪討論。

第二輪討論的方案是根據(jù)打完包之后生成的script src 的hash值去判斷,每次打包都會生成唯一的hash值,只要輪詢?nèi)ヅ袛嗖灰粯恿?#xff0c;那一定是重新部署了.

3.代碼實現(xiàn)

interface Options {timer?: number }export class Updater {oldScript: string[] //存儲第一次值也就是script 的hash 信息newScript: string[] //獲取新的值 也就是新的script 的hash信息dispatch: Record<string, Function[]> //小型發(fā)布訂閱通知用戶更新了constructor(options: Options) {this.oldScript = [];this.newScript = []this.dispatch = {}this.init() //初始化this.timing(options?.timer)//輪詢}async init() {const html: string = await this.getHtml()this.oldScript = this.parserScript(html)}async getHtml() {const html = await fetch('/').then(res => res.text());//讀取index htmlreturn html}parserScript(html: string) {const reg = new RegExp(/<script(?:\s+[^>]*)?>(.*?)<\/script\s*>/ig) //script正則return html.match(reg) as string[] //匹配script標簽}//發(fā)布訂閱通知on(key: 'no-update' | 'update', fn: Function) {(this.dispatch[key] || (this.dispatch[key] = [])).push(fn) return this;}compare(oldArr: string[], newArr: string[]) {const base = oldArr.lengthconst arr = Array.from(new Set(oldArr.concat(newArr)))//如果新舊length 一樣無更新if (arr.length === base) {this.dispatch['no-update'].forEach(fn => {fn()})} else {//否則通知更新this.dispatch['update'].forEach(fn => {fn()})}}timing(time = 10000) {//輪詢setInterval(async () => {const newHtml = await this.getHtml()this.newScript = this.parserScript(newHtml)this.compare(this.oldScript, this.newScript)}, time)}} 復(fù)制代碼

代碼用法

//實例化該類 const up = new Updater({timer:2000 }) //未更新通知 up.on('no-update',()=>{console.log('未更新') }) //更新通知 up.on('update',()=>{console.log('更新了') }) 復(fù)制代碼

4.測試

執(zhí)行 npm run build 打個包

安裝http-server

使用http-server 開個服務(wù)

重新打個包npm run build

這樣子就可以檢測出來有沒有重新發(fā)布就可以通知用戶更新了。

總結(jié)

以上是生活随笔為你收集整理的前端重新部署如何通知用户刷新网页?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本不卡久久 | 国产高清视频免费 | 国产精久久久 | 欧美日韩国产在线观看 | babes性欧美69| 在线久久| 天堂av在线免费观看 | 啪啪在线观看 | 精品啪啪 | 97精品视频在线观看 | 一区二区三区视频播放 | 四虎影院www| 特级毛片爽www免费版 | 欧美日韩国产在线一区 | 欧美一级做 | 成人av免费播放 | 日韩成人在线播放 | 日韩网红少妇无码视频香港 | av大片网| 手机看片一区二区 | jizz视频在线观看 | 精品69 | 少妇把腿扒开让我舔18 | 美女上床网站 | 97精品超碰一区二区三区 | 九九热在线播放 | 黄色av网站免费 | 黄色一级大片 | 毛片视频网站在线观看 | 中文字幕精品一区二区三区视频 | 日韩久久一区二区三区 | 69视频在线免费观看 | 青青草福利视频 | 熟女一区二区三区四区 | 亚洲交性网| 欧美成视频| 中文字幕在线观看第二页 | 中文字幕 日本 | 国产理论视频 | 日韩欧美四区 | 黄色污污网站在线观看 | 国产精品66 | 日韩精品第二页 | 久热99| 国产精品精品久久久久久 | 国产jizz| 成人刺激视频 | 国产一区二区视频在线免费观看 | 激情一级片 | 黄色片免费看 | 国产一线天粉嫩馒头极品av | 亚洲精品在线免费 | 中国美女黄色 | 日韩在线观看视频一区 | 伊在线久久丫 | 天天射天天 | 高h喷水荡肉少妇爽多p视频 | 天堂网www. | 欢乐谷在线观看免费播放高清 | 九九精品在线视频 | 一区二区久久 | 国产视频入口 | 狠狠欧美 | 天天久久综合 | 交hdsexvideos娇小 | 肥老熟妇伦子伦456视频 | 波多野吉衣伦理片 | 久久久久久久久久久久久国产 | 一区精品在线 | 精品www久久久久久奶水 | 久久久亚洲精品视频 | 日日射夜夜 | 天天欧美 | 玩偶姐姐在线观看免费 | 中文字幕黄色av | 九九午夜 | 2025中文字幕| 国产深夜视频 | 午夜激情福利电影 | 成人精品一区二区三区电影黑人 | 国产精品一区二区入口九绯色 | 亚洲综合视频网 | 男男肉耽高h彩漫 | 久久麻豆视频 | 免费无遮挡在线观看视频网站 | 亚洲a在线观看 | 国产熟女一区二区丰满 | 久久精品国产精品亚洲毛片 | 青青草久久爱 | 成人av教育 | 日韩av不卡在线观看 | 天堂av电影在线观看 | 欧美性生活免费视频 | 伊人春色av | 高h视频在线免费观看 | 成人淫片| 深夜视频在线播放 | 精品美女在线 | www.av网站|