在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高级程序设计 读书笔记之十一 内置对象Global
Mar 07 Javascript
javascript jscroll模拟html元素滚动条
Dec 18 Javascript
js随机颜色代码的多种实现方式
Apr 23 Javascript
简单的js表单验证函数
Oct 28 Javascript
JS实现的Select三级下拉菜单代码
Aug 20 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
Jan 25 Javascript
js实现复选框的全选和取消全选效果
Jan 03 Javascript
详解webpack-dev-server使用方法
Sep 14 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
Dec 12 Javascript
详解vue移动端项目代码拆分记录
Mar 15 Javascript
node运行js获得输出的三种方式示例详解
Jul 02 Javascript
解决vue自定义组件@click点击失效问题
Apr 30 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
桌面中心(二)数据库写入
2006/10/09 PHP
杏林同学录(三)
2006/10/09 PHP
php 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
php实现微信支付之企业付款
2018/05/30 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
IE php关于强制下载文件的代码
2008/08/23 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
深入理解Promise.all
2018/08/08 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
python中list列表的高级函数
2016/05/17 Python
numpy数组拼接简单示例
2017/12/15 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
求职简历自荐信
2013/10/20 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
员工薪酬激励方案
2014/06/13 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
2014年节能降耗工作总结
2014/12/11 职场文书
司机岗位职责范本
2015/04/10 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
创业计划书之废品回收
2019/09/26 职场文书
Python办公自动化PPT批量转换操作
2021/09/15 Python
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android