IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> js解决单线程之路 - worker的使用分析 -> 正文阅读

[JavaScript知识库]js解决单线程之路 - worker的使用分析

写在前面

今天写一个关于实现多线程的东西,都知道js是一个单线程的语言,所谓的单线程就是一次只能做一件事,多线程就是一次可以做很多件事,当然目前我们的电脑等设备很少会有单线程了,比如我们的电脑一般都是标的6核12线程,这句话的意思就是一个核心有两个线程,也就是可以同时做两件事,那么一般的情况下如果我们每次只做一件事的话是效率很低的,但是因为历史原因,js本身又是一个单线程的语言,所以后来js就用一些方法来进行模拟多线程任务,进而来更好的适应当前环境下的一些硬件需求,今天我们讲的worker就是js用来处理多线程的一种解决方案,好的,废话不多说了,下面我们简单的看一下他的用法,相信以后可以对你的编程有一些帮助,当然我也会说一下他的优缺点,以便于我们更好酌情使用,毕竟这个东西也不是说一定可以提高你的运行效率,他也是分情况的

worker简介

使用菜鸟教程里面的一段话进行介绍:web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行

基本使用

  • worker.js

在这里插入图片描述

self是脚本自带的,可以直接在js中进行使用无需进行引入等操作

在这里插入图片描述

上面是他的基本使用,下面简单的介绍一下他的优势

  • 解决阻塞的问题?

  • 可以提高性能?

写一个例子进行验证一下

在这里插入图片描述

运行结果如下图

在这里插入图片描述

不过这里有一个点是值得注意的,就是他是一个一个运行的,也就是说他的 ** 运行时间是三个时间相加起来的,所以他的总时间其实是三个相加起来的时间,也就是大概4s的时间 ** ,中间如果有一个运行出问题了,那么后面的也就不会执行了,因为他们是在一个主线程中运行的,比如我在中间的函数中改错一个形参,

在这里插入图片描述

如下图

在这里插入图片描述

下面我们使用worker的写法运行

  • dg1.js

在这里插入图片描述

  • dg2.js

在这里插入图片描述

  • dg3.js

在这里插入图片描述

  • index.html

在这里插入图片描述

运行结果

在这里插入图片描述

这里需要注意的是,这个结果是同时出现的,也就是说他一共用了2.3秒的时间大概

下面我们将第二个的函数改错一个形参,看一下运行结果

在这里插入图片描述

总结

通过上面的例子我们大概可以得到一个结论和使用的一些建议:

结论:通过主线程进行统一运行比较高负荷的程序的时候,会导致运行比较缓慢,如果运行的过程中出现了问题,那么后续的程序运行会受到影响,所以这里从提高运行效率上,使用worker是可以解决这个运行阻塞的问题,从运行时间上看,也是有一定提高的,但是我并没有绝对的说是提高的,毕竟次线程的运行能力是不如主线程的,从上面的例子可以看出来,虽然是一个2.3s一个是4s,但是单个运行时间比较的时候,会发现,其实主线程的运行时间是比较短的,这个程序还不是很明显,你们自己可以测试一下,我们只是通过比较总用时进行判断他可以时间上提高运行效率,因为new Worker的实例也是需要时间消耗的,当然也不排除我的设备硬件能力的问题

建议: 我们在写程序的时候,如果有一个线程是需要独立出来的,和主业务关系不大的,但是又担心他会阻塞的时候,可以将该程序使用次线程进行处理,单个的时间可能会降低,但是不会造成运行阻塞的问题,那么另一个建议就是不要乱用,因为很多的业务都是相互引用的,这个时候就会出现异步运行的时候,上一个进程还有没结束,但是下一个进程已经开始运行了,但是后一个进程还需要上一个进程的返回结果,这个时候会导致程序运行bug

写在最后

以上就是关于worker的基本使用和注意事项,博主能力有限,写的不好的地方可以随时指出,鄙人看到会及时纠正,感谢!

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 10:59:18  更:2022-12-25 11:02:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 2:39:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码