在Vue环境下利用worker运行interval计时器的步骤

 更新时间:2019年08月01日 09:14:27   作者:ycsx  
这篇文章主要介绍了在Vue环境下利用worker运行interval计时器的步骤,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

今天在code review时,发现之前遗留的问题:

在一个视频播放页面,有一个40ms的interval一直在阻碍,导致视频延时逐渐增大

于是写了一个worker单独把计时器拉出去跑了

实现步骤如下

由于用的是vue-cli,在webpack下要安装worker-loader依赖才能单独加载worker.js

npm install worker-loader --save-dev

更改 vue.config.js 文件的配置项

configureWebpack:{
  module: {
    rules: [
      {
        test: /\.worker\.js$/,
        loader: 'worker-loader',
        options: {
         inline: true,
         fallback: false,
         name: '[name]:[hash:8].js'
        }
      }
    ]
  },
}

注意,worker-loader配置项一定要写在js-loader的前边,否则报错。

下面写封装的方法,为了适配多计时器的情况,需要建一个class类

/**
 * worker类
 * export定时器方法
 * 
 */
export class workerTimer {
  constructor(){
     
  }
  timeInterval(name,interval,_this){
    console.log(name+'计时器已建立');  
    this[name] = setInterval(() => {
      _this.postMessage({name:name,message:interval/1000+'秒到了'})
    },Number(interval))
  }
}

然后用worker主方法调用这个类,e为组件内传入的计时器数组

import {workerTimer} from './workerTimer'
/**
 *通过遍历器遍历参数
 *new出新的worker类
 *调用定时器方法
 */
self.onmessage = function (e) {
  e.data.map((item) => {
   let workertimer = new workerTimer()
   workertimer.timeInterval(item.name,item.interval,self)
  })
};

在vue组件内引入worker

import Worker from './worker.js'

在methods里写一个方法,名字随便起

workerInit(){
  this.worker = new Worker();
  this.worker.postMessage(this.workerList);
  this.worker.onmessage = (params) => {
    ...
  }
},

在data里创建一个变量,格式如下:

workerList:[
  {name:'snapInterval',interval:10000},
  {name:'intervalFunc',interval:40}
],

在某个钩子内调用worker方法

mounted(){
  this.workerInit()
}

以上,具有两个定时器的work就建立好了,在主线程内可以通过worker传回的name来判断来触发回调。

销毁worker也很简单,只需要在destory时钩子里写上

this.worker.terminate();

即可

总结

以上所述是小编给大家介绍的在Vue环境下利用worker运行interval计时器的步骤,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • vue项目中引入Sass实例方法

    vue项目中引入Sass实例方法

    在本文里小编给大家整理的是关于vue项目中引入Sass的相关知识点内容,有需要的朋友们可以测试参考下。
    2019-08-08
  • 基于vue实现一个禅道主页拖拽效果

    基于vue实现一个禅道主页拖拽效果

    最近在做一个基于vue的后台管理项目。接下来通过本文给大家分析一款基于vue做一个禅道主页拖拽效果,需要的朋友可以参考下
    2019-05-05
  • vue3使用vue-router嵌套多级路由的方法

    vue3使用vue-router嵌套多级路由的方法

    Vue3 嵌套路由的使用和 Vue2 相差不大,主要的区别是 Vue3 的路由实例化使用了 createApp() 方法,所以实例化路由时需要传入根组件,这篇文章主要介绍了vue3使用vue-router嵌套路由(多级路由),需要的朋友可以参考下
    2023-12-12
  • 关于Vue 监控数组的问题

    关于Vue 监控数组的问题

    这篇文章主要介绍了Vue 监控数组的示例,主要包括Vue 是如何追踪数据发生变化,Vue 如何更新数组以及为什么有些数组的数据变更不能被 Vue 监测到,对vue监控数组知识是面试比较常见的问题,感兴趣的朋友一起看看吧
    2022-05-05
  • Vue + OpenLayers 快速入门学习教程

    Vue + OpenLayers 快速入门学习教程

    大家都知道使用 Openlayers可以很灵活自由的做出各种地图和空间数据的展示。而且这个框架是完全免费和开源的,本文记录下 Vue 使用 OpenLayers 入门,使用 OpenLayers 创建地图组件的相关知识,需要的朋友一起学习下吧
    2021-09-09
  • 全面总结Vue3.0的多种侦听方式

    全面总结Vue3.0的多种侦听方式

    Vue提供了一种更通用的方式来观察和响应当前活动的实例上的数据变动:侦听属性,下面这篇文章主要给大家介绍了关于Vue3.0多种侦听方式的相关资料,需要的朋友可以参考下
    2021-10-10
  • 解决Vue数据更新了但页面没有更新的问题

    解决Vue数据更新了但页面没有更新的问题

    在vue项目中,有些我们会遇到修改完数据,但是视图却没有更新的情况,具体的场景不一样,解决问题的方法也不一样,在网上看了很多文章,在此总结汇总一下,需要的朋友可以参考下
    2023-08-08
  • vue使用ArcGis API for js创建地图实现示例

    vue使用ArcGis API for js创建地图实现示例

    这篇文章主要为大家介绍了vue使用ArcGis API for js创建地图实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • vue-cli设置css不生效的解决方法

    vue-cli设置css不生效的解决方法

    这篇文章主要介绍了vue-cli设置css不生效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Vue的列表之渲染,排序,过滤详解

    Vue的列表之渲染,排序,过滤详解

    这篇文章主要为大家详细介绍了Vue的列表之渲染,排序,过滤,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02

最新评论