在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 相关文章推荐
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
Feb 03 Javascript
mailto的使用技巧分享
Dec 21 Javascript
javascript中this做事件参数相关问题解答
Mar 17 Javascript
原生js实现给指定元素的后面追加内容
Apr 10 Javascript
Jsonp post 跨域方案
Jul 06 Javascript
微信小程序 Button 组件详解及简单实例
Jan 10 Javascript
基于canvas的二维码邀请函生成插件
Feb 14 Javascript
Vue.js组件间的循环引用方法示例
Dec 27 Javascript
解决angularjs中同步执行http请求的方法
Aug 13 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
Aug 30 Javascript
微信公众号开发之微信支付代码记录的实现
Oct 16 Javascript
详细介绍解决vue和jsp结合的方法
Feb 06 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批量生成随机用户名
2008/07/10 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
thinkphp分页集成实例
2017/07/24 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
2016/07/22 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
Vue渲染函数详解
2017/09/15 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
Python实现爬取逐浪小说的方法
2015/07/07 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
企业总经理岗位职责
2014/02/13 职场文书
奥林匹克的口号
2014/06/13 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
立项申请报告范本
2015/05/15 职场文书
学校教学管理制度
2015/08/06 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python