成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

在Vue環(huán)境下利用worker運(yùn)行interval計(jì)時(shí)器

BlackFlagBin / 1931人閱讀

在Vue-Cli環(huán)境下利用worker運(yùn)行interval計(jì)時(shí)器
今天在code review時(shí),發(fā)現(xiàn)之前遺留的問題:
在一個(gè)視頻播放頁(yè)面,有一個(gè)40ms的interval一直在阻礙,導(dǎo)致視頻延時(shí)逐漸增大
于是寫了一個(gè)worker多帶帶把計(jì)時(shí)器拉出去跑了
實(shí)現(xiàn)步驟如下
由于用的是vue-cli,在webpack下要安裝worker-loader依賴才能多帶帶加載worker.js
npm install worker-loader --save-dev
更改vue.config.js文件的配置項(xiàng)
configureWebpack:{
    module: {
        rules: [
            {
                test: /.worker.js$/,
                loader: "worker-loader",
                options: {
                  inline: true,
                  fallback: false,
                  name: "[name]:[hash:8].js"
                }
            }
        ]
    },
}
注意,worker-loader配置項(xiàng)一定要寫在js-loader的前邊,否則報(bào)錯(cuò)。
下面寫封裝的方法,為了適配多計(jì)時(shí)器的情況,需要建一個(gè)class類
/**
 * worker類
 * export定時(shí)器方法
 * 
 */
export class workerTimer {
    constructor(){
         
    }
    timeInterval(name,interval,_this){
        console.log(name+"計(jì)時(shí)器已建立");   
        this[name] = setInterval(() => {
            _this.postMessage({name:name,message:interval/1000+"秒到了"})
        },Number(interval))
    }
}
然后用worker主方法調(diào)用這個(gè)類,e為組件內(nèi)傳入的計(jì)時(shí)器數(shù)組
import {workerTimer} from "./workerTimer"
/**
 *通過遍歷器遍歷參數(shù)
 *new出新的worker類
 *調(diào)用定時(shí)器方法
 */
self.onmessage = function (e) {
    e.data.map((item) => {
      let workertimer = new workerTimer()
      workertimer.timeInterval(item.name,item.interval,self)
    })
};
在vue組件內(nèi)引入worker
import Worker from "./worker.js"
在methods里寫一個(gè)方法,名字隨便起
workerInit(){
    this.worker = new Worker();
    this.worker.postMessage(this.workerList);
    this.worker.onmessage = (params) => {
        ...
    }
},
在data里創(chuàng)建一個(gè)變量,格式如下:
workerList:[
    {name:"snapInterval",interval:10000},
    {name:"intervalFunc",interval:40}
],
在某個(gè)鉤子內(nèi)調(diào)用worker方法
mounted(){
    this.workerInit()
}
以上,具有兩個(gè)定時(shí)器的work就建立好了,在主線程內(nèi)可以通過worker傳回的name來(lái)判斷來(lái)觸發(fā)回調(diào)。
銷毀worker也很簡(jiǎn)單,只需要在destory時(shí)鉤子里寫上
this.worker.terminate();
即可

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106263.html

相關(guān)文章

  • [Javascript] 實(shí)現(xiàn)setInterval函數(shù)

    摘要:更方便的在于,由于自帶定時(shí)器功能,我們甚至不用自己去維護(hù)一個(gè)時(shí)間戳。請(qǐng)注意這里由于沒有調(diào)用另一個(gè)腳本,我們通過和的方式將我們的定時(shí)器程序傳入中。 問題 經(jīng)常使用Javascript的同學(xué)一定對(duì)setInterval非常熟悉,當(dāng)使用setInterval(callback, timer)時(shí),每經(jīng)過timer毫秒時(shí)間,系統(tǒng)都將調(diào)用一次callback。請(qǐng)問全局如果沒有提供setInterv...

    zhangwang 評(píng)論0 收藏0
  • Swoole 源碼分析——Server模塊之Timer模塊與時(shí)間輪算法

    摘要:當(dāng)其就緒時(shí),會(huì)調(diào)用執(zhí)行定時(shí)函數(shù)。進(jìn)程超時(shí)停止進(jìn)程將要停止時(shí),并不會(huì)立刻停止,而是會(huì)等待事件循環(huán)結(jié)束后停止,這時(shí)為了防止進(jìn)程不退出,還設(shè)置了的延遲,超過就會(huì)停止該進(jìn)程。當(dāng)允許空閑時(shí)間小于時(shí),統(tǒng)一每隔檢測(cè)空閑連接。 前言 swoole 的 timer 模塊功能有三個(gè):用戶定時(shí)任務(wù)、剔除空閑連接、更新 server 時(shí)間。timer 模塊的底層有兩種,一種是基于 alarm 信號(hào),一種是基于...

    qieangel2013 評(píng)論0 收藏0
  • 瀏覽器渲染機(jī)制

    摘要:瀏覽器渲染進(jìn)程瀏覽器內(nèi)核進(jìn)程,內(nèi)部是多線程的默認(rèn)每個(gè)頁(yè)面一個(gè)進(jìn)程,互不影響。事件觸發(fā)線程歸屬于瀏覽器而不是引擎,用來(lái)控制事件循環(huán)可以理解成引擎自己都忙不過來(lái),需要瀏覽器另開線程協(xié)助。 線程和進(jìn)程 進(jìn)程和線程的概念可以這樣理解: 進(jìn)程是一個(gè)工廠,工廠有它的獨(dú)立資源--工廠之間相互獨(dú)立--線程是工廠中的工人,多個(gè)工人協(xié)作完成任務(wù)--工廠內(nèi)有一個(gè)或多個(gè)工人--工人之間共享空間 工廠有多個(gè)工人...

    appetizerio 評(píng)論0 收藏0
  • 瀏覽器渲染機(jī)制

    摘要:瀏覽器渲染進(jìn)程瀏覽器內(nèi)核進(jìn)程,內(nèi)部是多線程的默認(rèn)每個(gè)頁(yè)面一個(gè)進(jìn)程,互不影響。事件觸發(fā)線程歸屬于瀏覽器而不是引擎,用來(lái)控制事件循環(huán)可以理解成引擎自己都忙不過來(lái),需要瀏覽器另開線程協(xié)助。 線程和進(jìn)程 進(jìn)程和線程的概念可以這樣理解: 進(jìn)程是一個(gè)工廠,工廠有它的獨(dú)立資源--工廠之間相互獨(dú)立--線程是工廠中的工人,多個(gè)工人協(xié)作完成任務(wù)--工廠內(nèi)有一個(gè)或多個(gè)工人--工人之間共享空間 工廠有多個(gè)工人...

    lncwwn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<