成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WebWorker 即將被取代!JS 發布全新 API

開發 前端
我們可以通過下圖來理解這個問題。為了讓頁面二、頁面三、頁面四能夠知道頁面一的數據狀態,數據的狀態管理就變得至關重要。可以把數據狀態理解為類似于 Promise 的三種狀態:未緩存、緩存中和已緩存。

背景

首先,簡單介紹一下背景。我們正在開發一個基于 Vue3 的項目,客戶習慣通過多個瀏覽器標簽頁同時打開相同的項目,這樣可以輕松地操作多個頁面。比如,客戶會這樣操作(雖然這只是一個簡化的例子,實際情況可能是兩個非常不同的頁面):

圖片圖片

這種做法其實可以理解,因為一些客戶不喜歡頻繁地在同一標簽頁內切換菜單,他們認為這樣太麻煩了。

盡管這兩個頁面的布局和內容差異很大,但有一部分內容其實是相似的(雖然它們有所不同,因此沒有封裝成獨立組件)。

圖片圖片

這部分相似的邏輯是依賴同一個接口和相同的數據處理邏輯的,而且這兩個過程都需要花費比較長的時間:

  • 接口請求: 需要大約3000ms,因為后端數據獲取邏輯比較復雜,而且返回的數據量也很大。
  • 數據處理: 大約300ms,前端拿到數據后還需要進行處理。

因此,客戶提出了一個建議:既然這兩部分內容的邏輯是一樣的,能否讓多個頁面(比如頁面二、頁面三、頁面四)共享頁面一的數據呢?

分析與優化

在客戶提出優化需求之前,我們先從優化點的角度來考慮一下。

接口請求和數據處理這兩個過程都是比較耗時且涉及大數據量的操作。一開始,我的思路是嘗試使用 WebWorker 來處理這些任務。

但是,客戶的建議讓我意識到 WebWorker 并不適用,原因如下:

  • 每個標簽頁的 WebWorker 是獨立的,不能共享數據。
  • 即便使用 WebWorker 和 IndexedDB 來緩存數據并嘗試共享,但依然很難共享數據的狀態。

第一個原因大家可能都理解。第二個原因則需要進一步解釋:為什么數據狀態共享如此重要呢?

我們可以通過下圖來理解這個問題。為了讓頁面二、頁面三、頁面四能夠知道頁面一的數據狀態,數據的狀態管理就變得至關重要。可以把數據狀態理解為類似于 Promise 的三種狀態:未緩存、緩存中和已緩存

圖片圖片

舉個例子來說明兩種可能的情況:

圖片圖片

  • 情況一: 頁面一加載后點擊按鈕發起數據請求并進行緩存,接著再點擊頁面二的按鈕。此時,頁面二應該能直接使用頁面一的緩存數據,這種情況就沒有問題。
  • 情況二: 頁面一點擊按鈕1秒后,用戶點擊了頁面二的按鈕。此時,頁面二并不知道頁面一的數據狀態,無法判斷是否需要發起新的請求,或者應該等待頁面一的請求完成。

因此,共享數據狀態顯得尤為重要。

SharedWorker

經過分析,我決定放棄 WebWorker 的方案,改用 SharedWorker 來實現數據共享。

圖片圖片

SharedWorker 是什么呢?它可以被理解為類似于 WebWorker,但有一個關鍵的不同點:SharedWorker 允許多個標簽頁共享,而 WebWorker 每個標簽頁都獨立。

當多個標簽頁連接同一個 SharedWorker 時,SharedWorker 會通過port管理每個標簽頁,每個標簽頁對應一個port。這樣,通過 SharedWorker,多個標簽頁可以共享數據。

為了說明 SharedWorker 的工作原理,下面是一個簡單的例子,演示如何通過 SharedWorker 實現多個頁面間的count共享。

圖片圖片

圖片圖片

如上圖所示,count變量在多個標簽頁間共享。

圖片圖片

接下來,我們修改shared-worker.js中的邏輯,讓其負責數據請求和處理:

圖片圖片

圖片圖片

然而,經過測試,我們發現目前的實現并沒有達到預期的效果!雖然共享了count數據,但如果我們按順序點擊頁面一和頁面二,數據并不會同時出現,反而出現了請求重復的情況,這樣并沒有優化到位。

解決方案

此時,我們意識到需要實現數據狀態共享,這可以通過利用 Promise 來完成。通過 Promise,頁面可以等待數據請求和處理完成,然后再進行后續的操作。

圖片圖片

最終效果如下:

圖片圖片

這樣,即使用戶沒有同時點擊頁面一和頁面二,只要頁面一的數據請求和處理完成,頁面二也能同時獲取到已經緩存的數據。

通過這種方式,我們成功地實現了多個頁面之間的數據共享,并且保證了數據狀態的同步。

責任編輯:武曉燕 來源: 前端之神
相關推薦

2010-04-21 11:35:30

負載均衡技術

2025-07-03 08:52:27

JSAPIVuex

2014-06-24 10:37:03

智能設備新技術

2022-05-09 17:23:02

FIDO密碼

2020-12-08 09:01:05

微服務網絡化Kubernetes

2014-03-02 15:41:02

2010-04-13 09:38:19

Office Mac

2011-10-18 09:52:26

Chrome

2009-02-09 08:55:12

ArcGIS API發布Silverlight

2011-03-17 10:01:58

Ext JSHTMLRIA

2021-04-20 07:47:00

JCenter停止服務

2013-05-10 12:58:18

Windows 8.1

2018-01-16 23:20:41

WiFi5G無線通信

2013-05-08 11:01:35

BYODPC應用IT系統

2023-04-24 17:20:31

移動云

2020-10-27 18:05:32

云計算

2023-12-25 08:41:31

Firefox瀏覽器資訊

2012-05-29 14:26:01

聯想服務器ThinkServer

2018-10-18 10:17:23

5GWi-Fi運營商

2017-04-07 13:06:55

金融創新大數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品在线观看 | 中文字幕欧美一区二区 | 欧美三级成人理伦 | 免费a v网站 | 成人激情视频免费观看 | 国产91观看 | 欧美成视频 | 国产精品一区在线观看 | av黄色在线| h视频网站在线观看 | 日韩欧美黄色 | 亚洲五码久久 | 中文字字幕一区二区三区四区五区 | 九九免费在线视频 | 成在线人视频免费视频 | 成人性视频免费网站 | 91精品久久久久久久99 | 国内久久 | 精品久久国产 | 久久久久久久久久久久久久av | 免费在线视频一区二区 | 波多野结衣一二三区 | 婷婷国产一区 | 欧美三级成人理伦 | 国产一级一级毛片 | 蜜桃视频在线观看免费视频网站www | 欧美日韩1区 | 天天插天天射天天干 | 欧美色综合 | 国产精品视频999 | 欧美在线一区二区三区 | 国产精品一区二区久久 | 中文字幕欧美一区 | 久久久观看 | 91久色 | 成人免费观看男女羞羞视频 | 福利片在线观看 | 中文字幕乱码一区二区三区 | 人人人人人爽 | 国产一区二区三区视频在线观看 | 一区二区三区在线电影 |