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

news2024/10/7 8:29:58

在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文件可被正确加载。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASPICE-SYSSWE

文章主要内容&#xff1a; Automotive SPICE 过程参考模型 SYS.1 需求挖掘 过程ID SYS.1 过程名称 需求挖掘 过程目的 需求挖掘过程的目的是:在产品和/或服务的整个生命周期内收集、处理和跟踪不断变化的利益相关方的需要和需求&#xff0c;从而建立一个需求基线&#x…

5G智慧电力数字孪生可视化平台,推进电力行业数字化转型

5G智慧电力数字孪生可视化平台&#xff0c;推进电力行业数字化转型。5G智慧电力数字孪生可视化平台&#xff0c;正逐渐成为电力行业数字化转型的重要推动力。数字孪生集成了5G通信技术、大数据处理、云计算、人工智能等前沿技术&#xff0c;实现了电力系统的实时监测、数据分析…

SQLite—免费开源数据库系列文章目录

下一篇&#xff1a;SQLite——世界上部署最广泛的免费开源数据库&#xff08;简介&#xff09; ​SQLite系列相关文章较多特开本文为了便于读者阅读特写了本索引和目录之用本文将不断更新中有需要的读者可以收藏本文便于导航到各个专题( 持续更新中......)。收藏一篇等于收藏一…

基础知识学习 -- qnx 系统

QNX是一个基于优先级抢占的系统。 这也导致其基本调度算法相对比较简单。因为不需要像别的通用操作系统考虑一些复杂的“公平性”&#xff0c;只需要保证“优先级最高的线程最优先得到 CPU”就可以了。 基本调度算法 调度算法&#xff0c;是基于优先级的。QNX的线程优先级&a…

鸿蒙开发实战:【Faultloggerd部件】

theme: z-blue 简介 Faultloggerd部件是OpenHarmony中C/C运行时崩溃临时日志的生成及管理模块。面向基于 Rust 开发的部件&#xff0c;Faultloggerd 提供了Rust Panic故障日志生成能力。系统开发者可以在预设的路径下找到故障日志&#xff0c;定位相关问题。 架构 Native In…

jupyter notebook使用教程

首先是打开jupyter notebook 下载安装好之后&#xff0c;直接在命令行中输入‘jupyter notebook’即可跳转到对应页面 还可以进入想要打开的文件夹&#xff0c;然后再文件夹中打开中断&#xff0c;执行‘jupyter notebook’命令&#xff0c;就能够打开对应文件界面的jupyter …

Leetcode 202.快乐数 JAVA

题目 思路 要注意题目中说的无限循环&#xff1a;它是指在求平方和的过程中&#xff0c;会再次出现之前的值&#xff08;想象一个圈&#xff09;&#xff0c;这种情况的时候肯定算不出1来。 所以我们要设定跳出循环的条件是&#xff1a;当平方和结果为1或者出现循环了 出现循…

数字逻辑-时序逻辑电路二——沐雨先生

一、实验目的 &#xff08;1&#xff09;熟悉计数器的逻辑功能及特性。 &#xff08;2&#xff09;掌握计数器的应用。 &#xff08;3&#xff09;掌握时序逻辑电路的分析和设计方法。 二、实验仪器及材料 三、实验原理 1、集成4位计数器74LS161&#xff08;74LS160&#…

区块链宣传推广文案怎么写 区块链宣传推广文案的写作技巧

区块链宣传推广文案的写作技巧 随着区块链技术的不断发展和应用&#xff0c;区块链项目的宣传推广变得越来越重要。而撰写有效的区块链宣传推广文案&#xff0c;则是吸引目标受众关注的关键。下面是一些区块链宣传推广文案的写作技巧&#xff1a; 1. 简明扼要的标题&#xff1…

Docker进阶教程 - 2 Docker部署SpringBoot项目

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 2 Docker部署SpringBoot项目 已经学习了 Dockerfile 了&#xff0c;下面介绍一下如何将 SpringBoot 项目通过 Dockerfile 来部署到 Docker 中。 1 修改项目配置 首先需要准备一个 SpringBo…

c++算法学习笔记 (9) 双指针

1.最长连续不重复子序列 给定一个长度为 n 的整数序列&#xff0c;请找出最长的不包含重复的数的连续区间&#xff0c;输出它的长度。 输入格式 第一行包含整数 n。 第二行包含 n 个整数&#xff08;均在 0∼10^5 范围内&#xff09;&#xff0c;表示整数序列。 输出格式 …

初识Java篇(JavaSE基础语法)(1)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a; 我要学编程(ಥ_ಥ)-CSDN博客 目录 前言&#xff1a; 初识Java 运行Java程序 注释 标识符 关键字 数据类型与变量 字面常量 数据类型 变量 类型转换 类型提升 字…

基于springboot在线博客系统源码和论文

社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符合自己要…

Git Bash命令初始化本地仓库,提交到远程仓库

git init&#xff1a;初始化空仓库 // 初始化一个空仓库或者重新初始化一个存在的仓库 git init git remote // 为当前本地仓库添加一个远程仓库地址 git remote add origin https://gitee.com/xxx/demo.git git pull // 从设置好链接的远程仓库拉去已经存在的数据&#xff0c;…

疯狂送树莓派Pico!与CODESYS和上海晶珩一起,探索慕尼黑上海电子展!

3月20日-3月22日 上海新国际博览中心 E2馆 2200展 上海晶珩 X CODESYS 与您相约慕尼黑上海电子展 上海晶珩&#xff08;EDATEC&#xff09;荣幸宣布&#xff0c;将与全球自动化软件领导者CODESYS公司共同参展2024慕尼黑上海电子生产设备展&#xff01; 届时&#xff0c;我…

【数据结构】二叉树的相关操作以及OJ题目

文章目录 1. 二叉树2.二叉树的遍历2.1前序遍历2.2中序遍历2.3后序遍历2.4层序遍历 3.树的节点个数4.树的高度5.叶子节点的个数6.第k层节点的个数7.查找x所在的节点8.树的销毁9.相关题目9.1相同的树9.2单值二叉树9.3对称二叉树9.4二叉树的构建9.5翻转二叉树9.6另一颗树的子树 10…

Learn OpenGL 17 立方体贴图

立方体贴图 我们已经使用2D纹理很长时间了&#xff0c;但除此之外仍有更多的纹理类型等着我们探索。在本节中&#xff0c;我们将讨论的是将多个纹理组合起来映射到一张纹理上的一种纹理类型&#xff1a;立方体贴图(Cube Map)。 简单来说&#xff0c;立方体贴图就是一个包含了…

Java基础夯实——八股文【2024面试题案例代码】

1、Java当中的基本数据类型 Java中常见的数据类型及其对应的字节长度和取值范围如下&#xff1a; byte&#xff1a;1字节&#xff0c;取值范围为-128到127。short&#xff1a;2字节&#xff0c;取值范围为-32,768到32,767。int&#xff1a;4字节&#xff0c;取值范围为-2,147…

【Greenhills】GHS-MULTI IDE-Ubuntu纯命令系统部署license文件

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 记录在Ubuntu纯命令系统中部署license文件的步骤。 2、 问题场景 客户服务器为Linux纯命令行的环境&#xff0c;客户也无其他服务器可以部署&#xff0c;需在纯命令行上尝试安装。 3、软硬件环境 1&#xff09…

【Linux系统编程】进程程序替换

介绍&#xff1a; 进程程序替换是指将一个进程中正在运行的程序替换为另一个全新的程序的过程&#xff0c;但替换不是创建新进程&#xff0c;只是将对应程序的代码和数据进行替换。具体来说&#xff0c;这个替换过程涉及将磁盘中的新程序加载到内存结构中&#xff0c;并重新建立…