QCon北京开幕在即|与全球 140+ 顶尖工程师共同解构 AI 时代的技术浪潮 了解详情
写点什么

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:007618
用户头像

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

关注

评论

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

模块七作业

Geek_ec866b

架构训练营

模块七

Leo

架构实战营

SpringBoot接入轻量级分布式日志框架(GrayLog)

Java工程师

Java spring 分布式 springboot 组件

读《A Philosophy of Software Design》——(9)

术子米德

架构师成长笔记

读《A Philosophy of Software Design》——(11)

术子米德

架构师成长笔记

浅谈加密算法 aes

奋飞安全

android 安全

老项目改造返回值规范化

Rubble

4月日更

模块七作业

blazar

「架构实战营」

读《A Philosophy of Software Design》——(13)

术子米德

架构师成长笔记

洞见科技深度参编的央行金科联盟「多方安全计算」及「联邦学习」金融应用研究报告正式发布

洞见科技

金融科技 隐私计算 金融创新

王者荣耀商城异地多活架构设计

李大虾

#架构实战营 「架构实战营」

读《A Philosophy of Software Design》——(10)

术子米德

架构师成长笔记

不想被开巨额罚单?银行需筑起数据安全“护城河”

BeeWorks

关于数据仓库架构及各组件方案选型

五分钟学大数据

数据仓库 4月月更

声网的混沌工程实践

声网

测试 混沌工程 质量保障 Dev for Dev

那些年我们一起优化的SQL

Java工程师

Java sql 程序员 索引 MySQL 数据库

现代间谍技术的演变:从“王牌特工”到“行走的50w”

脑极体

众安保险 x StarRocks | 全新实时分析能力开启数字化经营新局面

StarRocks

数据库 StarRocks

适合 Kubernetes 初学者的一些实战练习 (五)

汪子熙

postgresql Kubernetes Cloud Native statefulset 4月月更

读《A Philosophy of Software Design》——(14)

术子米德

架构师成长笔记

每个互联网人才都应该知道的SQL注入!

喀拉峻

网络安全 安全 渗透测试 SQL注入

Redis+Caffeine两级缓存,让访问速度纵享丝滑

Java工程师

Java 数据库 redis 架构 高性能

架构训练营 模块七

Geek_16d2b8

架构训练营 模块七

读《A Philosophy of Software Design》——(8)

术子米德

架构师成长笔记

云原生小课堂|高性能、高可用、可扩展的MySQL集群如何组建?

York

云原生 MySQL 高可用 MySQL 数据库

数据库原理知识及SQL语言知识拓展

王小王-123

MySQL 数据库 MySQL 数据库 4月月更

区块链溯源!“有机”食品也要“有迹可循”

旺链科技

区块链 产业区块链 食品追溯

王者荣耀商城异地多活架构设计

AragornYang

架构训练营 架构实战营

模块7作业

Mr小公熊

[Day8]-[动态规划] 最长公共子序列

方勇(gopher)

LeetCode 动态规划 数据结构与算法、

Tapdata PDK 生态共建计划启动!Doris、OceanBase、PolarDB、SequoiaDB 等十余家厂商首批加入

tapdata

数据库 实时数据

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