在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 相关文章推荐
javascript 播放器 控制
Jan 22 Javascript
jQuery中创建实例与原型继承揭秘
Dec 21 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
Mar 27 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
Aug 21 Javascript
js使用数组判断提交数据是否存在相同数据
Nov 27 Javascript
动态的绑定事件addEventListener方法的使用
Jan 24 Javascript
JS动态创建DOM元素的方法
Jun 09 Javascript
js图片放大镜实例讲解(必看篇)
Jul 17 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
Sep 21 Javascript
js实现漂亮的星空背景
Nov 01 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
Nov 05 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 parse_url 一个好用的函数
2009/10/03 PHP
Javascript 构造函数 实例分析
2008/11/26 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
浅谈js基本数据类型和typeof
2016/08/09 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
jQuery动态生成的元素绑定事件操作实例分析
2019/05/04 jQuery
浅谈JS的原型和继承
2019/05/08 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
Python使用type动态创建类操作示例
2020/02/29 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
浅析python实现动态规划背包问题
2020/12/31 Python
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
英国最受欢迎的手表网站:Watch Shop
2016/10/21 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
教师党员思想汇报
2014/01/06 职场文书
车辆转让协议书
2014/04/15 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
学院党委班子四风问题自查报告及整改措施
2014/10/25 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
会计工作能力自我评价
2015/03/05 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
mysql幻读详解实例以及解决办法
2022/06/16 MySQL