在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 相关文章推荐
jquery显示和隐藏div特效实例
Feb 27 Javascript
AngularJS基础学习笔记之控制器
May 10 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
Aug 17 Javascript
关于session和cookie的简单理解
Jun 08 Javascript
微信小程序 页面跳转事件绑定的实例详解
Sep 20 Javascript
什么是Vue.js框架 为什么选择它?
Oct 17 Javascript
Node.js实现发送邮件功能
Nov 06 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
Jan 17 Javascript
JavaScript函数的特性与应用实践深入详解
Dec 30 Javascript
react中使用css的7中方式(最全总结)
Feb 11 Javascript
Vue的状态管理vuex使用方法详解
Feb 05 Javascript
node.js使用yargs处理命令行参数操作示例
Feb 11 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+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
仅用[]()+!等符号就足以实现几乎任意Javascript代码
2010/03/01 Javascript
一段批量给页面上的控件赋值js
2010/06/19 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
深入了解js原型模式
2019/05/30 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
Django 批量插入数据的实现方法
2020/01/12 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
一套Delphi的笔试题一
2016/02/14 面试题
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
公司合作协议书范本
2014/04/18 职场文书
团结演讲稿范文
2014/05/23 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
优秀工作者事迹材料
2014/12/26 职场文书
后勤工作个人总结
2015/02/28 职场文书
新课程改革心得体会
2016/01/22 职场文书
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python
Python实现归一化算法详情
2022/03/18 Python
Redis高可用集群redis-cluster详解
2022/03/20 Redis