在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 tab效果的实现代码
Dec 26 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
Oct 16 Javascript
Javascript 实现图片无缝滚动
Dec 19 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
Jan 19 Javascript
JS实现中文汉字按拼音排序的方法
Oct 09 Javascript
vue.js todolist实现代码
Oct 29 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
Dec 14 Javascript
es6新特性之 class 基本用法解析
May 05 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
Sep 04 Javascript
详解javascript函数写法大全
Mar 25 Javascript
html中创建并调用vue组件的几种方法汇总
Nov 17 Javascript
详解Vue数据驱动原理
Nov 17 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会员权限控制实现原理分析
2011/05/29 PHP
解析数组非数字键名引号的必要性
2013/08/09 PHP
PHP 读取和编写 XML
2014/11/19 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
python中argparse模块用法实例详解
2015/06/03 Python
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
Python txt文件如何转换成字典
2020/11/03 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
蔻驰美国官网:COACH美国
2016/08/18 全球购物
《十六年前的回忆》教学反思
2014/02/14 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers