在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 相关文章推荐
通过DOM脚本去设置样式信息
Sep 19 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
Apr 07 Javascript
JSON.parse()和JSON.stringify()使用介绍
Jun 20 Javascript
网站接入QQ登录的两种方法
Jul 22 Javascript
使用jQuery实现input数值增量和减量的方法
Jan 24 Javascript
jquery分隔Url的param方法(推荐)
May 25 Javascript
最全的Javascript编码规范(推荐)
Jun 22 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
Oct 02 Javascript
在VUE style中使用data中的变量的方法
Jun 19 Javascript
vue-model实现简易计算器
Aug 17 Javascript
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
详解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设计模式 Composite (组合模式)
2011/06/26 PHP
php实现singleton()单例模式实例
2014/11/06 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
js解决movebox移动问题
2016/03/29 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
基于elementUI竖向表格、和并列的案例
2020/10/26 Javascript
python实现数组插入新元素的方法
2015/05/22 Python
Python写入CSV文件的方法
2015/07/08 Python
使用Python搭建虚拟环境的配置方法
2018/02/28 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
Python字符串格式化输出代码实例
2019/11/22 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
公路绿化方案
2014/05/12 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
党员年度个人总结
2015/02/14 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
python中的装饰器该如何使用
2021/06/18 Python