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


Posted in Javascript onAugust 01, 2019

今天在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计时器的步骤,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
js onpropertychange输入框 事件获取属性
Mar 26 Javascript
瀑布流布局代码一例
Apr 11 Javascript
浅谈 jQuery 事件源码定位问题
Jun 18 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
Oct 30 Javascript
全面解析Bootstrap排版使用方法(文字样式)
Nov 30 Javascript
javascript解决小数的加减乘除精度丢失的方案
May 31 Javascript
JavaScript实现邮箱地址自动匹配功能代码
Nov 28 Javascript
关于javascript获取内联样式与嵌入式样式的实例
Jun 01 Javascript
JavaScript判断浏览器和hack滚动条的写法
Jul 23 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
Jul 27 Javascript
Element-UI中关于table表格的那些骚操作(小结)
Aug 15 Javascript
vue2.x数组劫持原理的实现
Apr 19 Javascript
详解Vue2.5+迁移至Typescript指南
Aug 01 #Javascript
微信小程序组件传值图示过程详解
Jul 31 #Javascript
vue.js实现回到顶部动画效果
Jul 31 #Javascript
vue实现滑动超出指定距离回顶部功能
Jul 31 #Javascript
Vue实现回到顶部和底部动画效果
Jul 31 #Javascript
详解mpvue实现对苹果X安全区域的适配
Jul 31 #Javascript
vue将后台数据时间戳转换成日期格式
Jul 31 #Javascript
You might like
php入门教程 精简版
2009/12/13 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
discuz图片顺序混乱解决方案
2015/07/29 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
2013/11/06 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
自定义vue组件发布到npm的方法
2018/05/09 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
Python获取远程文件大小的函数代码分享
2014/05/13 Python
详解Python import方法引入模块的实例
2017/08/02 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
.net面试题
2016/09/17 面试题
道德模范先进事迹
2014/02/14 职场文书
出纳员的岗位职责
2014/02/22 职场文书
小学生秋游活动方案
2014/02/23 职场文书
任命书模板
2014/06/04 职场文书
党员查摆剖析材料
2014/10/10 职场文书
婚宴新郎致辞
2015/07/28 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
python 如何做一个识别率百分百的OCR
2021/05/29 Python
Python turtle编写简单的球类小游戏
2022/03/31 Python
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python