Vue.js中使用Web Workers来创建一个秒表

在Vue.js中使用Web Workers来创建一个秒表应用可以提高性能,因为Web Workers可以在后台线程中运行,不阻塞主线程。下面是一个简单的Vue.js秒表应用的示例,该应用使用Web Worker来执行计时功能。

首先,我们创建一个Web Worker文件来处理秒表的计时逻辑。我们将这个文件命名为stopwatch.worker.js

// stopwatch.worker.js

self.onmessage = function(event) {
  let intervalId;
  let startTime = 0;
  let elapsedTime = 0;
  const isRunning = event.data.start;

  if (isRunning) {
    startTime = self.performance.now();
    intervalId = setInterval(() => {
      elapsedTime = self.performance.now() - startTime;
      self.postMessage({ type: 'time', elapsedTime: Math.round(elapsedTime) });
    }, 10); // 每10毫秒发送一次时间更新
  } else {
    // 停止秒表
    clearInterval(intervalId);
    self.postMessage({ type: 'time', elapsedTime: 0 });
  }
};

self.onerror = function(error) {
  console.error('Worker error:', error);
};

然后,在Vue组件中,我们创建一个秒表组件,并与Web Worker进行通信: 

vue

<template>
  <div>
    <h2>Vue.js 秒表</h2>
    <p>时间: {{ formattedTime }}</p>
    <button @click="startStop">开始/停止</button>
    <button @click="reset">重置</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      worker: null,
      elapsedTime: 0,
      isRunning: false,
    };
  },
  computed: {
    formattedTime() {
      const seconds = Math.floor(this.elapsedTime / 1000);
      const milliseconds = this.elapsedTime % 1000;
      return `${seconds.toString().padStart(2, '0')}:${milliseconds.toString().padStart(3, '0')}`;
    },
  },
  methods: {
    startWorker() {
      this.worker = new Worker('./stopwatch.worker.js');
      this.worker.onmessage = (event) => {
        if (event.data.type === 'time') {
          this.elapsedTime = event.data.elapsedTime;
        }
      };
    },
    startStop() {
      if (this.isRunning) {
        this.worker.postMessage({ start: false });
        this.isRunning = false;
      } else {
        if (!this.worker) {
          this.startWorker();
        }
        this.worker.postMessage({ start: true });
        this.isRunning = true;
      }
    },
    reset() {
      this.elapsedTime = 0;
      this.isRunning = false;
      if (this.worker) {
        this.worker.postMessage({ start: false });
        this.worker.terminate();
        this.worker = null;
      }
    },
  },
  beforeDestroy() {
    if (this.worker) {
      this.worker.terminate();
    }
  },
};
</script>

 

在上面的Vue组件中,我们定义了一个worker数据属性来存储Web Worker的实例,以及elapsedTime来跟踪经过的时间。formattedTime计算属性负责将毫秒转换为秒和毫秒的格式。

startWorker方法用于初始化Web Worker,并设置消息监听器来更新elapsedTimestartStop方法根据isRunning的值来开始或停止秒表。reset方法重置秒表并终止Web Worker。

最后,在beforeDestroy生命周期钩子中,我们确保在组件销毁之前终止Web Worker,以避免内存泄漏。

请注意,为了使此代码正常工作,你需要在项目的public或static文件夹中放置stopwatch.worker.js文件,或者根据你的构建配置进行适当调整,以确保Web Worker文件可被正确加载。

这只是一个简单的示例,实际应用中可能需要对秒表功能进行更多的优化和扩展,比如添加暂停/继续功能、改进时间格式显示等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/468665.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【iOS】——Blocks

文章目录 前言一、Blocks概要1.什么是Blocks 二、Block模式1.block语法2.block类型变量3.截获自动变量值4._Block修饰符5.截获的自动变量 三、Blocks的实现1.Block的实质2.截获自动变量值3._Block说明符4.Block存储域 前言 一、Blocks概要 1.什么是Blocks Blocks是C语言的扩…

国创证券|超五成私募看好AI成为年度行情主线

3月18日&#xff0c;2024年度全球游戏开发者大会&#xff08;GDC&#xff09;与英伟达GPU&#xff08;图形处理器&#xff09;技能大会&#xff08;GTC&#xff09;举行&#xff0c;出资者关于A股商场的“人工智能”也给予了更多等待。 2月6日至3月15日期间&#xff0c;商场对…

使用 nsenter 排查容器网络问题

需求 我想进入容器中执行 curl 命令探测某个地址的连通性&#xff0c;但是容器镜像里默认没有 curl 命令。我这里是一个内网环境不太方便使用 yum 或者 apt 安装&#xff0c;怎么办&#xff1f; 这个需求比较典型&#xff0c;这里教大家一个简单的方法&#xff0c;使用 nsent…

Linux/Bizness

Enumeration nmap 用 nmap 扫描了常见的端口&#xff0c;发现对外开放了22,80,443 ┌──(kali㉿kali)-[~] └─$ nmap 10.10.11.252 Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-08 01:21 EST Nmap scan report for 10.10.11.252 Host is up (0.36s latency). Not…

H266开源视频编码器VVENC现状

VVenC 是由 Fraunhofer HHI 研究团队开发的&#xff0c;主要是视频编码系统组。HHI 是欧洲最大的研究组织 Fraunhofer 协会的成员&#xff0c;该协会是德国的一个大型非营利性组织。源代码在&#xff1a; https://github.com/fraunhoferhhi/vvenc VVenC几乎与H.266视频标准同时…

什么是VR虚拟现实防火体验馆|VR设备购买|元宇宙文旅

VR虚拟现实防火体验馆是利用虚拟现实&#xff08;VR&#xff09;技术打造的一个模拟火灾场景的体验空间。通过虚拟现实头盔和交互设备&#xff0c;参与者可以在虚拟环境中感受和学习如何正确面对火灾&#xff0c;并进行逃生和自救。 这种虚拟现实防火体验馆通常会模拟真实的火灾…

CPU生产的生命周期 - 回收篇

电子废物的可持续再利用和回收每年变得更加重要。随着技术在全世界范围内变得越来越普及和普及&#xff0c;电子垃圾的产生率也随之直接增加。计算机的心脏是中央处理单元或CPU。我们认为电子废物的许多产品都包含某种处理器。为了保护环境免受日益严重的电子废物堆积问题的影响…

在Termux中安装个人hexo博客并结合cpolar工具实现远程访问

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

fn键设置

1、起因&#xff0c;按F7 F8调试&#xff0c;总是执行Fn功能&#xff0c;让人反感。 2、搜索了下对应的型号Fn键设置 方法一&#xff1a;浮岛式键盘Fn热键切换功能 方法二&#xff1a;通过键盘属性设置Fn锁定功能。【方法一解决了我的问题&#xff0c;方法二不试了。】 3、问题…

Windows电脑上如何进行硬盘分区操作!

在Windows操作系统环境下,对电脑硬盘进行分区是一种常见的硬盘管理手段,它可以帮助用户更好地组织和管理存储空间,确保操作系统、应用程序和用户数据各有所属。本文将详细介绍在Windows PC上进行硬盘分区的步骤,适用于Windows 7到Windows 11等不同版本的操作系统。 步骤一:…

SinoDB数据库运行分析

SinoDB数据库运行主要从数据库互斥资源等待、数据库写类型、备份文件有效性、Chunk状态等15个方向进行分析&#xff0c;具体说明如下&#xff1a; 一、数据库互斥资源等待 检查项目 数据库互斥资源等待 检查命令 onstat -g con |head -20 说明 onstat -g con 查看目前数据处…

mysql的学习笔记

干前端好几年了,只会前端总感觉少了条腿,处处不自在,决定今年学习下后端的东西.以前总想着学node会更快,但是实际工作上却用不上. 出来混,总是要还的,该学的javaWeb这一套体系的东西,总是需要学习的. 那就开始啦. 一,在本地电脑mac上安装mysql 这个参考的这篇文章,照着做一次…

Python:filter过滤器

filter() 是 Python 中的一个内置函数&#xff0c;用于过滤序列&#xff0c;过滤掉不符合条件的元素&#xff0c;返回由符合条件元素组成的新列表。该函数接收两个参数&#xff0c;一个是函数&#xff0c;一个是序列&#xff0c;序列的每个元素作为参数传递给函数进行判定&…

Linux——进程通信(二) 匿名管道的应用:进程池

前言 之前我们学习了进程通过匿名管道进行通信&#xff0c;实现了两个进程的数据传输。 如果我们管理的是很多个进程&#xff0c;通过管道发送指令&#xff0c;因为如果管道中没有数据&#xff0c;读端必须等待&#xff0c;也就是被管理的进程们都在等待我发送的指令&#xf…

某东联盟js逆向

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018…

【Web技术应用基础】HTML(2)——文本练习

题目1&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>HTML链接</title><meta name"description" content"HTML链接知识讲解"><meta name"keywords" content&qu…

C语言经典算法-6

文章目录 其他经典例题跳转链接31.数字拆解32.得分排行33.选择、插入、气泡排序34.Shell 排序法 - 改良的插入排序35.Shaker 排序法 - 改良的气泡排序 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. 三色棋 5. 老鼠走迷官&#xff08;一&…

HTML5+CSS3小实例:具有悬停效果的3D闪耀动画

实例:具有悬停效果的3D闪耀动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, init…

Python 第三方库(Tiptop\Rembg)

Tiptop 简介 tiptop:命令行系统监控工具 Tiptop 安装 1、创建虚拟环境photemaker, 并激活photemaker. 2、安装tiptop, 执行如下指令: pip install tiptop 3、执行效果 Tiptop 命令执行遇到的问题 在CMD 控制台执行tiptop 命令&#xff0c;提示如下报错&#xff1a; ──…

【Docker篇】数据卷相关操作

文章目录 &#x1f388;前言&#x1f354;数据卷&#x1f6f8;操作命令⭐创建一个数据卷&#xff0c;并查看数据卷在宿主机的目录位置 &#x1f339;挂载数据卷 &#x1f388;前言 在前面文章的nginx案例中&#xff0c;修改nginx的html页面时&#xff0c;需要进入nginx内部。并…