给 JavaScript 插上多线程的翅膀 —— Web Worker 的 Promise 化实践 (www.alloyteam.com)

【简介】

众所周知,JavaScript 这门语言的一大特点就是单线程,即同一时间只能同步处理一件事情,这也是这门语言衍生出的 nodeJS 被各后端大佬诟病的很重要的一点。


然而,JavaScript 在设计之初,其实是故意被设计成单线程语言的,这是由于它当时的主要用途决定的。

JavaScript 最初的设计初衷是完成页面与用户的交互,操作 DOM 或者 BOM 元素,此时如果一味地追求效率使用多线程的话,会带来资源抢占,数据同步等等问题,因此必须规定,同一时间只有一个线程能直接操作页面元素,以保证系统的稳定性以及安全性。

尽管如此,但是 JavaScript 并不是只能线性处理任务。JS 拥有消息队列和事件循环机制,通过异步处理消息的能力来实现并发。在高 I/O 型并发事务处理的过程中,由于不需要手动生成与销毁线程以及占用额外管理线程的空间,性能表现及为优异。因此,nodeJS 作为 JavaScript 在服务端的探索者,在处理高并发网络请求的优势极为明显。

尽管 JavaScript 通过异步机制完美解决了高 I/O 性能的问题,但 JavaScript 单线程执行的本质还是没有变的。因此缺点就显而易见了,那就是处理 CPU 密集型的事务时没有办法充分调动现代多核心多线程机器的运算资源。

在现代大型前端项目中,随着代码的复杂程度越来越高,本地的计算型事务也在变得繁重,而运行在单线程下 JS 项目必定会忙于处理计算而无暇顾及用户接下来的频繁操作,造成卡顿等不太好的用户体验,更严重的情况是,当计算型事务过多时还有可能因为资源被占满带来网页无响应的卡死现象。因此,Web 项目的本地多线程运算能力势在必行,由此,Web Worker 应运而生了。

点击查看全文 >>

@技术头条 2021-05-28 08:27分享 / 原作者微博:@AlloyTeam / 0个评论
赞过的人: IT技术博客大学习
要不要再学学下面的文章?
更快学习JavaScript的6个思维技巧 (mp.weixin.qq.com)
很多人学习JavaScript,问的第一个问题往往是“我应该使用哪个框架?”。但是,如果你还没有掌握最最基础的JavaScript,那这显然是一个错误的问题。你将你所有的时间用来研究不同的框架,于是,你开始停滞不前。
by @code小生 8小时前 分享 查看详情
JavaScript代理的惊人力量 (mp.weixin.qq.com)
释什么是Proxy的时候,说它可以创建一个Proxy,这有点搞笑。当然,他们并没有说错,但是我们可以简化这个说法,让它更加友好。
by @code小生 2021-07-25 21:59 分享 查看详情
MySQL 中存储时间的最佳实践 (zhuanlan.zhihu.com)
平时开发中经常需要记录时间,比如用于记录某条记录的创建时间以及修改时间。在数据库中存储时间的方式有很多种,比如 MySQL 本身就提供了日期类型,比如 DATETIME,TIMESTAMEP 等,我们也可以直接存储时间戳为 INT 类型,也有人直接将时间存储为字符串类型。

那么到底哪种存储时间的方式更好呢?
by @又拍云 2021-07-09 15:50 分享 查看详情
服务 24 亿级用户 App 的大前端实践! (mp.weixin.qq.com)
服务全球几十亿用户,茄子科技如何提升 App 的用户体验?怎样解决 App 的崩溃问题?如何应对海外复杂的网络问题?...... 针对上述问题,InfoQ 记者采访了茄子科技前端负责人。
by @code小生 2021-07-05 00:01 分享 查看详情
2020年JavaScript状态调研报告小结 (mp.weixin.qq.com)
今年的调查覆盖率了 137 个国家的 23,765 个人,大多数被调研者来自美国或西欧。报告地址:https://2020.stateofjs.com/en-US/。
by @code小生 2021-07-04 23:56 分享 查看详情
私有化仓库的 GO 模块使用实践 (zhuanlan.zhihu.com)
GO 在 1.11 版本开始引入 Module 的特性;1.13 版本引入 Module 校验和检查,加强了 Module 的安全性;现在的 1.16 版本已经默认使用 Module 模式。日前 GO 团队在博客上表明,将在 1.17 版本时删除对 GOPATH 的支持……
by @又拍云 2021-07-02 14:28 分享 查看详情
将一个纯本地应用移植到Web端 (mp.weixin.qq.com)
在研究一个奇怪的缓存错误(https://actualbudget.com/blog/cursed-caching-curious)时我得到了启发,于是去重新看了一下 Actual 是如何在 Web 端本地存储数据的。这里我需要解释一些历史背景:多年前,Actual 原本是一个单纯的桌面应用程序来着。这意味着我们的所有数据都会存储在本地,没有服务器,自然也不会在网络上存储任何内容。
by @code小生 2021-06-27 13:14 分享 查看详情
万字详解!Git入门最佳实践 (mp.weixin.qq.com)
Git 是一种分布式版本控制系统,它可以不受网络连接的限制,加上其它众多优点,目前已经成为程序开发人员做项目版本管理时的首选,非开发人员也可以用 Git 来做自己的文档版本管理工具。
by @code小生 2021-06-27 13:13 分享 查看详情
实践之后,我们来谈谈如何做好威胁建模 (tech.meituan.com)
对美团安全团队来说,引入领先的安全技术设计能力,构建全方位、多维度智能防御体系,是我们不懈追求的目标。美团有众多基础设施,核心业务系统也需要以成熟的方法论进行威胁评审。本文将着重分享威胁建模是如何帮助美团安全团队评估、发现大量安全设计的风险,以及互联网企业应该如何大范围地实施威胁建模并完整地进行落地。
by @技术头条 2021-06-13 23:17 分享 查看详情
FlutterWeb在美团外卖的实践 (tech.meituan.com)
美团外卖商家端业务围绕数百万商家,在 PC 和 App 上分别提供了交易履约、运营、广告、营销等一系列功能,且经常有外投 H5 的场景(如外卖学院、商家社区、营销活动等)。在这种多形态的业务场景下,如何保障多端体验一致性、如何提升多端迭代效率一直是商家端产研关注的重点。
by @技术头条 2021-06-13 23:17 分享 查看详情