给 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技术博客大学习
要不要再学学下面的文章?
美团大规模KV存储挑战与架构实践 (tech.meituan.com)
KV 存储作为美团一项重要的在线存储服务,承载了在线服务每天万亿级的请求量,并且保持着 99.995% 的服务可用性。在 DataFunSummit 2023 数据基础架构峰会上,我们分享了《美团大规模 KV 存储挑战与架构实践》,本文为演讲内容的整理。文章主要分为四个部分:第一部分介绍了美团 KV 存储发展历程;第二部分分享了内存 KV Squirrel 挑战和架构实践;第三部分阐述了持久化 KV Cellar 挑战和架构实践;最后一部分介绍了未来的发展规划。希望这些内容对大家有所帮助或启发。
by @技术头条 2024-03-21 22:53 查看详情
今天才知道,Web网页也能阻止息屏了 (www.zhangxinxu.com)
Chrome和Safari浏览器都支持了名为Screen Wake Lock的API,可以设置Web网页打开的状态下,显示器屏幕不会自动休眠。
by @技术头条 2024-03-21 22:53 查看详情
基于 LLaMA 和 LangChain 实践本地 AI 知识库 (blog.yuanpei.me)
通用人工智能,即:AGI(Artificial General Intelligence)的实现,正在以肉眼可见的速度被缩短,以前在科幻电影中看到的种种场景,或许会比我们想象中来得更快一些。不过,等待 AGI 来临前的黑夜注定是漫长而孤寂的。在此期间,我们继续来探索 AI 应用落地的最佳实践,即:在成功部署本地 AI 大模型后,如何通过外挂知识库的方式为其 “注入” 新的知识。
by @技术头条 2024-03-13 13:12 查看详情
基于接口数据变异的App健壮性测试实践 (tech.meituan.com)
本文主要介绍了对网络返回数据进行变异的客户端健壮性测试实践经验。文章第一部分介绍客户端健壮性测试的基本概念;第二部分分享了基于接口返回数据变异的App健壮性测试方案设计的思路;第三部分主要解读了变异数据的构造和异常检测方案设计;第四部分介绍了精简变异数据的探索方案。
by @技术头条 2024-03-12 22:45 查看详情
分布式因果推断在美团履约平台的探索与实践 (tech.meituan.com)
美团履约平台技术部在因果推断领域持续的探索和实践中,自研了一系列分布式的工具。本文重点介绍了分布式因果树算法的实现,并系统地阐述如何设计实现一种分布式因果树算法,以及因果效应评估方面qini_curve/qini_score的不足与应对技巧。希望能为从事因果推断相关工作的同学们提供一些启发或帮助。
by @技术头条 2024-03-12 22:39 查看详情
美团RASP大规模研发部署实践总结 (tech.meituan.com)
RASP是Runtime Application Self-Protection(运行时应用自我保护)的缩写,是一种应用程序安全技术。RASP 技术能够在应用程序运行时检测并阻止应用级别的攻击。随着云计算和大数据的发展,应用程序安全越来越受到重视。RASP 技术作为一种新型的安全防护手段,正在逐渐被业界接受并广泛应用。
by @技术头条 2024-01-28 23:48 查看详情
Web App: 从 HTML 到 Jamstack (zgq.ink)
Web 领域已发展得十分庞杂,就知识规模来说已不是你我一个人可以穷尽。从 Web 前后端开发角度来看,前端当下正流行着 Next.js、Remix 等 SSR 方案、以及 React 后续继续开发的 Server Component 等等;后端方面则搞出了“云原生”相关的一整套技术生态,各路轮子百花齐放,一不留神就容易沉迷其中而难以自拔。

对于开发者来说,越来越重要的事情也是,放下“穷尽一切”的执念,寻找属于自己的一隅落脚之地。在学习精力、时间有限的背景下,关注点也需要开始区分优先级,关于哪些技术细节值得关注,哪些其实不必花太多时间。

在这寻找落脚之地的旅程中,对事物发展的脉络有一个大致的把握,也变得越来越重要。大致也是需要搞清楚,当前 Web 技术大概发展到了什么样的程度,当下有什么问题正在被解决,哪些技术又可能成为历史包袱被淘汰。

想起我自初中开始接触编程至今,冥冥中伴随着 HTML5 技术从萌芽到成熟的过程,当下 HTML5 已融入我们生活方方面面,乃至于已向客户端开发领域进一步扩展。也许可以就我的所见所想,简单理一理其中经历的一些比较关键的形态,也让我对接下来时间精力大概可以投向的方向有所感知。至于技术细节,网络上有着丰富的资料,这里就不再赘述。
by @技术头条 2024-01-17 23:20 查看详情
美团RASP大规模研发部署实践总结 (www.cnxct.com)
RASP是Runtime Application Self-Protection(运行时应用自我保护)的缩写,是一种应用程序安全技术。RASP 技术能够在应用程序运行时检测并阻止应用级别的攻击。随着云计算和大数据的发展,应用程序安全越来越受到重视。RASP 技术作为一种新型的安全防护手段,正在逐渐被业界接受并广泛应用。其中Java RASP 是一种针对 Java 应用程序的 RASP 技术。通过在 Java 虚拟机(JVM)级别进行监控和防护,能够有效防止对 Java 应用程序的攻击。
by @技术头条 2024-01-17 23:15 查看详情
MinIO的分布式存储实践方案 (l1n.wang)
MinIO是一个开源的分布式对象存储组件,它兼容Amazon S3API,适合于存储大容量的非结构化数据,支持单个对象最大5TB。MinIO特点:部署简单,仅需要单独一个二进制文件;支持纠删码机制,能恢复部分数据块丢失的情况;读写性能高。
by @技术头条 2024-01-17 23:07 查看详情
AIOps在美团的探索与实践——事件管理篇 (tech.meituan.com)
美团服务运维团队从事前防御、事中处理、事后运营多个阶段探索AIOps在事件管理领域的应用。本文介绍了在各个运维领域中AIOps的赋能场景,详细阐述了每一个运维场景的业务价值以及算法的具体的落地效果。
by @技术头条 2023-12-26 22:00 查看详情