AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

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

关注

评论

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

EXCEL数据太“脏”无从下手?何须用python,ETL一分钟搞定

智分析

Excel ETL

边缘安全 | 正确使用CDN 让你更好规避安全风险

阿里云Edge Plus

安全 CDN

​Kubernetes资源清单篇:如何创建资源?​

xcbeyond

Kubernetes 28天写作 Kubernetes从入门到精通

Android面试(二)

我就感觉到快

程序员生产环境-软件篇

ITCamel

程序员 效率工具 工作效率

LeetCode题解:105. 从前序与中序遍历序列构造二叉树,递归+哈希表,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

跨界融合,区块链推动实体经济提档升级

CECBC

人工智能 云计算 大数据

Soul网关源码阅读(八)路由匹配初探

Java 源码阅读 网关

实现数字经济和实体经济深度融合

CECBC

区块链

数字货币应用从C端走向B端 实践中这些难题仍需关注

CECBC

数字货币

技术分享 | 漫谈音视频中的拥塞控制

拍乐云Pano

一文读懂 Serverless,将配置化思想复用到平台系统中

Serverless Devs

Serverless 云原生 PaaS

万字带你深入阿里开源的Canal工作原理

大数据老哥

大数据 canal

AES128解密只能解一半的问题

李日盛

AES 问题定位

客户服务高触达,零代码从短信/邮件跳转小程序客服

环信

企业短信服务质量与用户体验如何监控?短信监测技术震撼来袭

博睿数据

短信 数据监测

【我给面试官画饼】软件测试理论基础、质量保证常见面试题——会被面试官赶出来吗?

程序员阿沐

面试 软件测试 测试工程师 质量保证

【盘点2020】机房网络性能哪家强?年度冠军揭晓

博睿数据

机房 评测

直播预告丨NLP领域的2020年大事记及2021展望

京东科技开发者

机器学习 AI nlp

从烟酒茶说系统化学习

张老蔫

28天写作

大数据知识专栏 -MapReduce 自定义排序技术

小马哥

大数据 hadoop mapreduce 七日更

第一周作业

Esther

为什么你家的 K8s 应用平台不好用?

孙健波

Kubernetes PaaS KubeVela

胜天半子!阿里内部力荐SpringBoot全栈笔记全网首发,源码实战齐飞

Java架构之路

Java 程序员 架构 面试 编程语言

你kin你擦!阿里终于肯把内部高并发编程高阶笔记开源出来了

Java架构之路

Java 程序员 架构 面试 编程语言

关于JDK15的简单理解

Java架构师迁哥

永续合约APP系统软件开发

系统开发

观看辽篮比赛,思考团队管理——关于团队的灵魂拷问,你中了几个?

伯薇

团队管理 团队建设 团队 赋能 激励

阿里开源SpringSecurity:用户+案例+认证+框架

996小迁

Java 程序员 架构 面试 springsecurity

百度首届智能小程序高校大赛圆满结束:关注学生心理健康小程序获全国一等奖

DT极客

数据倾斜?Spark 3.0 AQE专治各种不服

王知无

大数据 spark

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