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

在Vue應用程序中使用Web Workers

開發 前端
這篇文章假定您具有Javascript和Vue的基本知識,接下下來了解如何在Vue應用程序中使用Web Workers。

這篇文章假定您具有Javascript和Vue的基本知識。

單線程JavaScript

作為單線程編程語言,Javascript一次只能執行一組指令,這意味著在執行下一個進程之前,所有其他進程都必須等待一條指令完成。

如果我們必須執行繁重的進程,并且還希望用戶仍然能夠與我們的應用程序交互,那么這將在我們的Web應用程序中帶來速度問題。比如說我們需要計算多個投資包的投資回報率,仍然要保證這些進程是非阻塞的,不在主線程上運行,這樣我們就可以在主線程上執行其他任務,比如進行網絡請求......進入web workers。

注意:阻塞是指串行處理,一次執行一項操作。另一方面,非阻塞代碼(異步)可以并行運行(或多線程)

Web Worker允許我們在后臺線程中運行進程,并在這些進程完成時通知主線程。這大大提升了性能,因為我們不需要把主線上的所有東西都分塊。

Web workers

Web Workers是Web內容在后臺線程中運行腳本的一種簡單方法,可以在不干擾用戶界面的情況下執行任務。一旦創建,worker就可以通過向代碼指定的事件處理程序發布消息,向創建它的JavaScript代碼發送消息(反之亦然)。

Javascript中的Web workers

主線程使用“Worker”構造函數創建 Worker,該構造函數只接收一個參數,即Worker文件的路徑。Worker包含將在Worker線程中運行的代碼;Worker在另一個不同于當前 window 的全局上下文中運行。

數據通過消息(message)在worker和主線程之間傳遞——主線程和worker線程使用 postMessage() 方法發送消息,并使用 onmessage 處理程序響應發送的消息。

這是一個使用Javascript實現Web workers的簡單示例:

MartinsOnuoha/js-webworker-example「鏈接」

在Vue中使用Web Worker

要在Vue應用中使用web worker,我們可以使用vue的web worker包裝器,比如vue-worker包,或者在低層實現它(從底層開始構建)。我將保持它的簡單性,并將在不使用vue-worker包的情況下構建這個示例,這樣我們就可以了解底層發生了什么。

讓我們設置我們的vue應用程序。

為了保持簡單,我將在純HTML頁面中使用Vue CDN,而不是使用Vue-CLI生成項目。讓我們設置應用程序文件夾。我們的文件夾結構如下所示:

應用

我們將在Vue中實現同樣的Javascript例子(一個倒計時計時器),由于倒計時計時器是一個長期運行的過程,我們將把它委托給我們的web worker,并在我們的主線程上觸發一個方法,當我們的計數器值被10整除時,從這個API中獲取一個隨機的狗圖像。結果看起來像這樣:

[[422310]]

https://silent-wish.surge.sh/

HTML

在index.html文件中,我們將構建我們的標記,包括vue-next CDN鏈接,我們的主腳本文件,以及vue的掛載點。

在這里,我們在頂部導入了CSS文件,在底部導入了腳本。我們還會顯示來自數據對象的counter屬性,當它可用時。使用image標簽,我們還會在可用時渲染“dogImage”值。

接下來,我們將在app.js條目文件中設置vue應用。

因為這個示例應用程序嚴重依賴于web Worker,所以我們需要首先檢查瀏覽器是否支持Worker,然后再實例化一個新的Worker類。

接下來,我們設置App對象。

  1. const App = { 
  2.    ... 

我們將有兩個 data 屬性:

  1. const App = { 
  2.   data() { 
  3.     return { 
  4.       dogImage: null, 
  5.       counter: 0, 
  6.     } 
  7.   } 

在我們的method對象中,我們將創建一個方法來從dog API中獲取隨機狗圖像。

  1. methods: { 
  2.   getDogImage () { 
  3.     fetch('https://dog.ceo/api/breeds/image/random') 
  4.       .then((response) => response.json()) 
  5.       .then((data) => { 
  6.          this.dogImage = data.message 
  7.       }) 
  8.     } 

最后,在 mounted 的鉤子中,我們將第一次調用 getDogImage 方法,然后在我們的worker對象上設置一個 onmessage 監聽器來監聽worker線程的更新,我們檢查worker發送的計數器值是否被10整除,如果是,我們再次調用 getDogImage 方法。

  1. ... 
  2. mounted () { 
  3.   this.getDogImage() 
  4.   worker.onmessage = (e) => { 
  5.     this.counter = e.data 
  6.     if (this.counter % 10 === 0) { 
  7.       this.getDogImage() 
  8.     } 
  9.   } 
  10. }, 
  11. ... 

然后,我們將App對象掛載在 #app 元素上。

整個app.js文件應如下所示:

為了美觀起見,我們將添加一些樣式。將其添加到app.css文件中。

您可以在VScode上使用LiveServer啟動應用程序。

源碼

查看所用示例應用程序的源代碼:https://github.com/MartinsOnuoha/vue-webworker-example

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2009-09-22 12:17:59

ibmdwLotus

2011-05-27 08:48:13

Android HTML

2009-06-19 13:45:53

Java應用程序Jfreechart

2013-10-09 11:15:49

Ubuntu應用程序

2009-11-23 19:52:55

ibmdwFlex

2022-08-30 20:00:37

零信任Linkerd

2010-07-26 11:02:46

2009-08-27 11:40:43

ibmdw云計算

2010-06-13 09:22:37

jQuery

2009-08-27 11:22:30

ibmdw云計算

2023-08-22 20:55:04

AzureLLMTypeChat

2009-01-03 14:25:10

ibmdwWeb

2009-09-22 12:59:07

ibmdwWeb

2010-05-20 09:48:36

2011-03-22 14:12:17

LAMP

2022-12-22 08:01:09

Vue測試庫測試

2013-06-24 10:21:47

面向對象Web應用JavaScript

2023-06-29 07:45:03

2011-07-18 10:00:47

iPhone iOS Visual Stu

2020-09-08 11:30:39

Edge DevTooWebAPI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久免费看 | 国产乱码精品一区二区三区中文 | 伦理午夜电影免费观看 | 亚洲va国产日韩欧美精品色婷婷 | 免费在线观看av的网站 | 亚洲日本免费 | 国产成人福利 | 免费在线观看一区二区三区 | 国产熟熟 | 久久乐国产精品 | 色婷婷综合久久久中字幕精品久久 | 免费精品| 欧美精品三区 | 一区二区三区亚洲 | 91天堂| 九九一级片 | 91精品国产综合久久精品 | 国产一区h| 久久三区 | 一区二区久久 | 欧美一卡二卡在线 | 国产婷婷精品 | 亚洲精品视频一区二区三区 | 国产日韩精品视频 | 熟女毛片| 日韩欧美高清dvd碟片 | 手机三级电影 | 久久精品网 | 国产精品久久久久久久久大全 | 亚洲精品欧美 | 国产精品一区一区三区 | 亚洲欧美日韩精品久久亚洲区 | 亚洲精品一区二区在线观看 | 国产中文字幕在线观看 | 国产精品无码永久免费888 | 中文字幕免费 | 亚洲一区二区电影在线观看 | 欧美黑人巨大videos精品 | 天天影视色综合 | 成人精品一区二区三区中文字幕 | 男人天堂午夜 |