写点什么

Web Worker 通信性能研究:通过多线程改进 Web 应用性能

  • 2019-08-19
  • 本文字数:1182 字

    阅读完需:约 4 分钟

Web Worker通信性能研究:通过多线程改进Web应用性能

Surma 是谷歌的 Web 布道师,最近发布了一项有关 postMessage 的性能研究结果。postMessage 是 Web Worker 的通信方式。Surma 的结论是,虽然 postMessage 会带来一些开销,但如果有效载荷低于给定的开销预算,那么将非 UI 任务移出主线线可能会提高总体性能。


超过一半的互联网接入来自手机或平板电脑,而低端多核移动设备的市场份额一直在增加,Web 应用程序开发人员必须确保应用程序在低配置的环境中(如慢 CPU、GPU 或小内存)也能具有高性能。


在这种情况下,使用多线程的 Web Worker 可以将与计算相关的负载从主执行线程中隔离出来。最终的性能是在原生多核心架构上并行化任务(如果可用)所带来的好处加上与线程间通信开销相关的成本的总和。对于 Web 应用程序来说,主要的通信开销是使用 postMessage 方法在主 UI 线程和 Web Worker 之间进行通信。


由于一些开发人员不愿使用 Web Worker, Surma 对 postMessage 的性能做了一些说明。Surma 解释了他的研究背后的缘由:


人们不会考虑使用 Web Worker,是因为他们担心 postMessage()的性能,所以这是值得研究的一件事情。


该研究包括两个基准。第一个基准测试分析了在线程之间发送消息所需的时间,并显示了它与所发送的对象的复杂性之间的正相关关系。


第一个基准测试分别在 2018 款 MacBook Pro 上的 Firefox、Safari 和 Chrome 上运行,在 Pixel 3XL 的 Chrome 上运行,在诺基亚 2 的 Chrome 上运行。对象复杂度是指表示对象的 JSON 树的深度(树的层次)和宽度(属性的数量)的组合。


第二个基准测试证实了与 JSON.stringify()返回的字符串长度的强正相关关系,不过带有一些警告。Surma 解释说:


我认为这种相关性足够强,我们可以从中得出一个法则:对象的字符串化 JSON 表示与它的传输时间大致成正比。但更重要的是,这种相关性只适用于大对象,我说的大对象是指超过 100KB 的对象。虽然这种相关性在数学上是成立的,但这种差异对于较小的有效载荷来说更为明显。


Surma 根据响应动画空闲加载(RAIL)指南给出了“慢”的定义,并对涉及 JS 驱动动画的上下文(显示下一帧的预算为 16ms)和不涉及上下文(响应用户交互的预算为 100ms)的情况进行了区分。


Surma 总结道:


即使在最慢的设备上,你也可以使用 postMessage()发送 100KB 的对象,并保持在 100ms 的响应预算之内。如果有 JS 驱动的动画,有效载荷达到 10KB 是没有问题的。对于大多数应用程序来说,这应该足够了。使用 postMessage()确实有一定的代价,但不至于会导致脱离主线程架构变得不可用。


对于 postMessage 成本超过在多个线程上运行任务的好处的情况,Surma 提供了替代方案,比如通过使用分块技术或 WebAssembly 来提升性能。


完整的研究结果可以在 Surma 的博客上找到,其中包含了数据、可视化演示和图表。


原文链接


Improving Webapp Performance With Multi-Threading: A Study of Web Workers’ Communication Overhead


2019-08-19 08:007500
用户头像

发布了 731 篇内容, 共 448.6 次阅读, 收获喜欢 2002 次。

关注

评论

发布
暂无评论
发现更多内容

火爆各平台的拼团功能,宝子们在多商户系统中玩过吗?

CRMEB

云原生(七) | Docker篇之深入Docker Compose

Lansonli

云原生 7月月更

学习web前端开发有哪些好的方法

小谷哥

大数据入门学习指南

Lansonli

大数据 7月月更 大数据基础 大数据基础知识 大数据核心

函数递归习题(easy版)

芒果酱

c++ C语言 7月月更

如何使用 SAP Intelligent Robotic Process Automation 自动操作 Excel

汪子熙

机器学习 RPA 机器人流程自动化 SAP 7月月更

软件研发效能度量的成功要素

思码逸研发效能

研发管理 研发效能 软件研发

性能领域:你知道的越多,不知道的也就越多

博文视点Broadview

Java培训如何选择靠谱

小谷哥

JS class 并不只是简单的语法糖!

掘金安东尼

JavaScript 前端 设计模式 7月月更

推荐一款支持数据 + 代码生成的开发工具!yyds

了不起的程序猿

Java 程序员 工具

web前端开发技术就业前景怎么样

小谷哥

JAVA编程规范之注释规约

源字节1号

后端开发

庖丁解牛,复盘 HiveServer2 连接频繁卡顿问题

移动云大数据

大数据 hive

大数据培训机构怎么选?

小谷哥

怎么选择好的web前端开发培训课程

小谷哥

小程序技术解决桌面应用敏捷迭代的一种思路

Speedoooo

小程序 移动开发 小程序容器 桌面应用

国际顶会OSDI首度收录淘宝系统论文,端云协同智能获大会主旨演讲推荐

阿里巴巴大淘宝技术

人工智能 #开源

【深度】新派LaaS协议Elephant:重振DeFi赛道发展的关键

小哈区块

巧用RoaringBitMap处理海量数据内存diff问题

得物技术

Java HBase BitMap

编程技巧│超实用 nginx 中常见的配置合集

nginx 运维 经验分享 7月月更

2022可信区块链生态大会落幕——旺链科技参与《区块链供应链金融系统评测方法》制定

旺链科技

区块链 产业区块链 供应链金融

百问百答第47期:极客有约——中信建投当前的监控体系建设情况

博睿数据

智能运维 博睿数据 中信建投 监控体系 系统监测

MySync——企点通用MySQL数据同步解决方案

腾讯企点技术团队

MySQL 数据库 日志 Binlog 同步

嵌入式操作系统多任务调度原理分析与RUST参考实现

Geek_0185b7

云原生、Intel Arch及云原生机密计算 3 大 SIG 在线分享!今天见 | 第 32-34 期

OpenAnolis小助手

开源 云原生 虚拟化 龙蜥大讲堂 SIG双周会

好书推荐|《产业数字化转型精要:方法与实践》

李洋

职业 数字化转型 数字经济 书籍 CIO的秘密武器

SAP 实施项目中涉及到编程方式操作 Excel 的几种场景介绍

汪子熙

Excel automation SAP abap 7月月更

DevOps 实践多年,最痛的居然是?

SoFlu软件机器人

浅析 Apache Kafka 分区重分配的实现原理

移动云大数据

kafka 开源

LP双币质押流动性挖矿dapp系统开发逻辑分析

开发微hkkf5566

Web Worker通信性能研究:通过多线程改进Web应用性能_移动_Bruno Couriol_InfoQ精选文章