给 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技术博客大学习
要不要再学学下面的文章?
Vercel 部署的单页应用(SPA)动态 Meta 标签实践 (innei.in)
在 Vercel 部署的单页应用(SPA)中,配置动态 Meta Tags 可改善 SEO 和分享体验。通过中间层实现 SSR 或利用 Edge Functions 渲染动态标签,可让每个页面呈现独立内容,兼顾性能与优化效果!
by @技术头条 9小时前 查看详情
AWS运维部署实践--快速拉起生产可用的EKS集群 (wiki.eryajf.net)
本文详细介绍了在 AWS 上快速搭建生产级 EKS 集群的步骤,包括子网规划、IAM 配置、必要命令工具的安装以及集群的创建和授权。通过 `eksctl` 工具快速定义和创建 EKS 集群,并提供了集群权限管理与网络配置的建议,确保集群安全和稳定运行。文中还包含完工后的调整建议,如将访问端点调整为私有以提升安全性。
by @技术头条 2024-11-02 17:08 查看详情
AWS运维部署实践--使用sigma自建镜像仓库代替ECR (wiki.eryajf.net)
本文介绍了如何使用 `sigma` 替代 AWS 的 ECR 作为轻量级的镜像仓库解决方案。通过配置 `s3` 存储、端口监听等设置,实现了低资源占用下的高效镜像管理。文章详细提供了 `config.yaml` 文件的配置方案,以及 `sigma` 部署的具体步骤,适合在自建环境中替代 ECR 进行镜像管理。
by @技术头条 2024-11-02 17:03 查看详情
React i18n CSR 最佳实践 (innei.in)
本文探讨 React 应用在客户端渲染中的 i18n 实践,包括懒加载、性能优化和翻译文件管理的最佳方法。
by @技术头条 2024-11-02 16:57 查看详情
AWS运维部署实践--route53私有域跨账号共享 (wiki.eryajf.net)
如果你的业务场景有多个 AWS 账号,那么私有域共享就是一个绕不开的话题。aws 中的 route53 私有域配置跨账号共享有两种方案,一种是直接跨账号关联 VPC,一种是通过配置文件共享的形式实现。本文采用第一种方案,只需要两条命令即可完成此需求。
by @技术头条 2024-11-02 16:52 查看详情
AWS运维部署实践--网络环境规划 (wiki.eryajf.net)
本文详述了 AWS 网络环境的规划,包括 VPC、子网、路由表的创建和管理。通过对公有、私有和内部子网的划分,以及 NAT 网关和 IGW 的配置,实现了不同网络的隔离与访问控制。同时,文章介绍了使用中转网关进行跨账号 VPC 打通的方法,为多账号和复杂网络环境提供了便捷的连接方案。这些规划为 AWS 运维部署打下了基础,有助于提升环境的安全性与可扩展性。
by @技术头条 2024-11-02 16:49 查看详情
IM系统重构到 SDK 设计的最佳实践 (crossoverjie.top)
本文介绍了 CIM 系统重构为 SDK 的实践,使用 Builder 模式创建客户端,实现了长连接、心跳检测及自动重连等功能,极大简化了消息收发流程。还优化了请求代理,通过 `ProxyManager` 动态管理 URL,提升了代码复用性。集成测试涵盖多服务器重连和消息验证,确保系统高可用性。重构增强了模块间解耦,使 SDK 更易于维护和扩展。
by @技术头条 2024-11-02 16:49 查看详情
容器技术驱动下的代码沙箱实践与思考 (blog.yuanpei.me)
本文探讨了基于容器技术的代码沙箱应用,旨在隔离代码执行环境,提升安全性和稳定性。通过 Docker 容器创建语言镜像,支持多语言代码执行。文章介绍了使用 Jupyter 实现代码可视化,并借助 nbformat 和 nbconvert 管理和执行 Jupyter 笔记本,增强代码展示效果。此方案不仅提高了开发灵活性,还便于在 AI 编程中实时展示和分析结果。
by @技术头条 2024-11-02 16:40 查看详情
全域用户建模在美团首页推荐的探索与实践 (tech.meituan.com)
本文详述了全域建模技术在美团首页推荐系统的发展和演进。美团首页推荐算法团队通过多阶段递进式探索验证,在召回与排序模块引入多展位、多应用渠道的多源用户交互数据,并在落地过程中解决了美团多展位、多业务、时空场景强相关性的特点导致的严重跨域信号负迁移挑战。
by @技术头条 2024-11-02 16:22 查看详情
日志与追踪的完美融合:OpenTelemetry MDC 实践指南 (crossoverjie.top)
本文介绍了如何在 OpenTelemetry 中使用 MDC(映射诊断上下文)实现日志与链路追踪的集成,帮助开发者快速定位问题。通过将 `trace_id` 等信息写入日志 MDC,实现日志和分布式追踪系统的无缝对接。在 Java 中结合 Logback 或 Log4j 并借助 OpenTelemetry agent,可以自动生成包含 MDC 的日志,便于多线程环境中的问题排查。
by @技术头条 2024-11-02 16:15 查看详情