在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 中的事件教程
Apr 05 Javascript
快速排序 php与javascript的不同之处
Feb 22 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
Aug 18 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
Aug 31 Javascript
在web中js实现类似excel的表格控件
Sep 01 Javascript
JavaScript中最常见的三个面试题解析
Mar 04 Javascript
简述jQuery Easyui一些用法
Aug 01 jQuery
AngularJS 购物车全选/取消全选功能的实现方法
Aug 14 Javascript
利用JS实现一个同Excel表现的智能填充算法
Aug 13 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
Nov 11 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
Apr 28 Javascript
Vuejs通过拖动改变元素宽度实现自适应
Sep 02 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
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
ZF等常用php框架中存在的问题
2008/01/10 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
浅谈javascript的调试
2015/01/28 Javascript
JS中Location使用详解
2015/05/12 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
深入理解vue Render函数
2017/07/19 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
django中使用vue.js的要点总结
2019/07/07 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
itchat接口使用示例
2017/10/23 Python
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python pandas常用函数详解
2018/02/07 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
python实现扫描ip地址的小程序
2019/04/16 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
python相对企业语言优势在哪
2020/06/12 Python
Python基于execjs运行js过程解析
2020/11/27 Python
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
建筑行业的大学生自我评价
2013/12/08 职场文书
教师研修随笔感言
2014/01/23 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书