阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

WebAssembly 在性能及加密场景的深度探索

  • 2019-11-08
  • 本文字数:2950 字

    阅读完需:约 10 分钟

WebAssembly在性能及加密场景的深度探索


随着 Web 技术的不断发展, WebAssembly 非常有技术前景。尽管很多公司已经尝试并落地 WebAssembly ,但仍有很多公司及开发者处于观望状态,他们并不了解如何将 WebAssembly 融入到现有的项目中。coupang 优先尝试 WebAssembly 并落地 ,将其融入到自己的项目中 ,目前对 WebAssembly 的探索已经小有成就。


在即将于 12 月 20~21 日举行的 GMTC 全球大前端技术大会 (深圳站) 上,coupang 高级软件开发工程师赵洋老师将分享《WebAssembly 在性能及加密场景的深度探索》。届时,他将通过 coupang 实际落地的两个项目,分享这两个项目不断演进的过程以及未来的发展方向,深入探讨 WebAssembly 的性能及保密相关的优势。通过分享让大家有所启发,并能够逐步引入 WebAssembly 技术提升自身的开发效率和产品体验。以下是 InfoQ 对赵洋老师的会前采访。


InfoQ: 请您简单介绍下自己以及自己所负责的工作。


赵洋: 我个人职业经历比较丰富,曾在百度、腾讯担任过前端工程师,也在全民直播这样的创业公司担任过前端开发经理;目前在 coupang 的 CMG 团队担任高级软件开发工程师。


coupang 是一个非常具有前景但很低调的独角兽公司,主要从事韩国电商相关的业务,目前也在积极发展国内商家的入驻。我所属的 CMG 在公司内部是一个非常年轻的团队,目前主要负责广告媒体平台的相关工作。coupang 非常崇尚 Work Life Balance,并且鼓励个人对外发声和贡献社区,因此我个人除了在公司团队内部贡献力量外,也时常编写一些围绕 WebAssembly 相关的开源项目,包括 SecurityWorkerWXInlinePlayer 等,同时也会参与一些著名开源项目,为之贡献代码,比如 ShadowNode、Vue 等。


InfoQ: 1995 年 JavaScript 诞生,2008 年浏览器加入即时编译器 JIT,JavaScript 的运行速度快了 10 倍。有人说,现在的 WebAssembly 是另一个转折点,您怎么看?


赵洋: 相较于 JavaScript 而言,WebAssembly 的性能提升是我们感受最明显的部分,在我们的业务场景测试中,对于 CPU 密集相关的应用来说,WebAssembly 确实有非常巨大的提升。但由于我们的大部分前端项目主要面向 UI 场景,在这个场景中 WebAssembly 与 JavaScript 需要频繁的相互调用并交换数据,导致通信成本比计算成本要高得多。因此,如何更好地利用 WebAssembly 仍然需要因地制宜,根据自己的场景来测试和选择。从技术趋势来看,随着 5G 技术的出现和硬件性能的提升,我们可以预见,Web 平台能够承担的复杂工作会越来越多,尽管 V8 每年仍会提升 JavaScript 的性能,但这种提升逐渐变缓,JavaScript 已经慢慢变为整个 Web 平台发展的瓶颈,所以 WebAssembly 的出现无疑是非常让人兴奋的。这并不是说 WebAssembly 会取代 JavaScript,前端工程师们也无须担心这种情况的发生,我觉得两种技术应该会不断融合,最终为 Web 创造更多可能性。


InfoQ:coupang 当初引入该技术的契机是什么?


赵洋: 我们的大部分前端项目面向 UI 场景, WebAssembly 与 JavaScript 需要频繁地相互调用并交换数据,我们主要使用 JavaScript 编写相关代码,然后采用混淆等方式增大代码被破译的难度,但从数据上看,效果并不是很好。


再加上 C/C++ 代码由风控团队编写和维护,他们能够很方便地编译到 iOS 和 Android 端;对于 Web 端来说,我们需要不断地同步他们的代码,并将 C/C++ 代码改写为 JavaScript ,由于风控的策略相关代码更新非常频繁和琐碎,这样不但会降低工作效率,还加大了开发成本。


所以我们引入了 WebAssembly ,这样就可以更好地复用 C/C++ 代码,其中包括人机识别的日志内容加密、活动页面的请求加密等,不仅跨部门跨团队能有效沟通提升工作效率,还能减少开发成本。


InfoQ: 未来,您认为 WebAssembly 将会如何发展?会有哪些典型的应用场景?


赵洋: 相对于 WebAssembly 更多被提及的性能,我觉得大家还应该把目光放在代码复用上。现在,越来越多的平台和语言开始支持 WebAssembly,我相信在未来也会有更多的新技术成果出现在 Web 平台上,从而使得 Web 具有更多的可能性。目前 WASI(WebAssembly System Interface)的出现已经逐步让 WebAssembly 的使用场景更为宽广。通过 WebAssembly 对其他平台、语言的代码进行更好的复用,我觉得这是非常重要且正确的路线。


InfoQ: WebAssembly 在性能及加密场景的探索中遇到的最大的难点是什么?团队是解决的?


赵洋: 在我们的实践中 ,WebAssembly 在性能上遇到的最大难点是,目前优化手段十分有限。例如,其多线程相关的支持还不太可用,也不支持汇编代码编译、AVX 指令等,但这些问题在之后的版本中应该会逐渐解决。而在加密场景中,我们目前仍然没有解决的问题是, WebAssembly 编译后 Codebase 过大。后期我们会和风控团队合作,逐步精简目前的库代码,使得 Codebase 进一步减少。目前风控日志加密这块收益比较大,过滤了 Web 端大量不专业的羊毛党用户,降低了公司的损失。


InfoQ: 京东、淘宝在前端也有基于 WebAssembly 的探索,coupang 在 WebAssembly 的应用上与之相比,有何异同?


赵洋: 相比于京东或淘宝来说,coupang 还是非常年轻的。因此,在技术以及产品上我们也在不断学习两家的优点,并对好的部分做一些内化和提升。同时,coupang 在 WebAssembly 的应用会更加直接面向用户,而不仅仅是内部探索。当然,目前 WebAssembly 在 coupang 的使用主要还是针对一些小的场景点进行提升、优化,仍然有非常大的提升空间。


InfoQ: WebAssembly 也出现了一段时间,就技术本身而言我们更想知道您即将在 GMTC 分享的两个实践案例,可以简单介绍下吗?


赵洋: 这次分享,主要通过我开源的两个项目 WXInlinePlayer 和 SecurityWorker 来介绍自己对 WebAssembly 的一些理解和实践经验。


WXInlinePlayer 是一个通过 WebAssembly 解码 FLV 的播放器项目,主要是为了解决移动端 Web 播放器体验不一致的问题,相较于手淘、花椒以往使用 WebAssembly+FFmpeg 进行的技术探索而言,WXInlinePlayer 通过自己实现 I/O、解码、渲染层等,大幅度减小了播放器核心的代码大小,并且针对于直播场景添加了一些减少延迟及优化体验的策略。届时我将和大家分享 WXInlinePlayer 的架构及实现细节,并一起探讨未来 WXInlinePlayer 的一些可行的性能提升策略。


SecurityWorker 是一个类似于 WebWorker 的独立 VM,其中使用了 WebAssembly 和 Duktape,并且自己实现了一些 Opcode 的设计和实现。其主要场景是用来保护业务中核心的 JavaScript 通讯逻辑。其参考了 Google reCAPTCHA 以及 Native 端的一些代码保护手段(VMP),目前 SecurityWorker 这套技术稳定使用在 coupang 的 Web 的风控日志加密上。我会和大家详细介绍 SecurityWorker 的前世今生,以及未来的规划。


活动推荐


在即将到来的 GMTC 深圳 2019 上,赵洋老师还会具体分享到,如何更好地保护前端的核心代码?如何更好地适配 Mobile 端播放器?以及常规的代码保护方案、Google reCAPTCHA 所采用的方案调研、WebAssembly 的落地方案、各方案优劣势对比、如何结合自身的场景去提升性能、缩小生成体积、增强编码体验等。


除了赵洋老师的分享,本次 GMTC 全球大前端技术大会(深圳站)2019 我们还设置了小程序挑战与应对、音视频技术、Serverless 实践、前端测试与安全、大前端工程化、Flutter 实战、新兴编程语言、团队建设与管理等热门技术专场。


2019-11-08 15:342967

评论

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

今天,「浪潮云说」直播间开讲啦!

浪潮云

您的出门“最后三公里”问题解决啦!

亚马逊云科技 (Amazon Web Services)

【视频】51CTO专访博睿数据COO吴静涛,解读IT运维“新范式”

博睿数据

千古无同局?围棋在线教育还有这样的打开方式!

亚马逊云科技 (Amazon Web Services)

记一次MySQL磁盘满了之后清理的过程

北游学Java

Java MySQL

智慧迪拜与不可或缺的区块链技术

CECBC

阿里P10热荐,面试前必看!Java高并发编程五套“完美日记”GitHub已经标星78K

Java架构追梦

Java 阿里巴巴 架构 面试 并发编程

全网72万浏览量!阿里重磅开放 “SpringCloudAlibaba学习笔记”(附下载)!

Java 编程 架构 面试 微服务

eKuiper 与百度智能边缘框架 BIE 集成方案

EMQ映云科技

边缘计算 边缘技术 边缘流式数据 #百度# 智能IoT边缘服务

图解 Redis丨这就是 RDB 快照,能记录实际数据的

华为云开发者联盟

redis 数据 日志 aof RDB 快照

java特点了解及JDK初谈(程序员必看!)

Java 程序员 面试

【案例】消除隐患,基于电力大数据的群租房智能分析

星环科技

如何使用 Distroless 让你的容器更加安全

K8sCat

flask Docker Kubernetes Google Distroless

阿里专家把SpringBoot:入门+基础+进阶+项目全部整理出来了

Java 编程 架构 面试 微服务

备战金九银十:4000道Java面试真题合集,助你搞定面试官

智慧社区平台解决方案,平安小区建设解决方案

Linux运维职业困惑?给你史上最全互联网Linux工作规划!

学神来啦

查漏补缺!复盘B站面试坑我最深的Java并发:JDK源码剖析

Java 编程 程序员 架构 面试

架构之:微服务架构漫谈

程序那些事

架构 微服务 程序那些事

Nginx的进程管理与重载原理

Linux服务器开发

nginx 后端 中间件 Linux服务器开发 进程管理

直播连麦技术闭坑篇

anyRTC开发者

音视频 WebRTC 视频直播 视频通讯 视频连麦

花168大洋买来的【阿里P8Java成长笔记】,看完才知道我就是菜鸡

Java架构师迁哥

秋招冲刺:网络安全工程师入围成功之旅!!

网络安全学海

面试 运维 网络安全 信息安全 渗透

国足晋级12强!看人工智能如何更好地预测世界级赛事!

亚马逊云科技 (Amazon Web Services)

数字货币将给我们的生活带来什么?

CECBC

未来,让我们一起想象 — “Imagine” 阿里云视频云全景创新峰会

阿里云视频云

阿里云 计算机视觉 音视频 视频 英特尔

权限与认证:HTTP状态码返回

程序员架构进阶

Java HTTP 28天写作 6月日更

昆明智慧安防小区建设方案,平安社区建设

译文 | 新手PM指南:你应该避开的六大常见错误

LigaAI

产品 产品经理 产品设计

云小课 | 玩转HiLens Studio之快速订购HiLens Studio版本

华为云开发者联盟

AI modelarts 华为HiLens HiLens Studio EI智能体

万物互联时代,如何玩转鸿蒙系统的用户体验?

博睿数据

鸿蒙 用户体验 博睿数据

WebAssembly在性能及加密场景的深度探索_大前端_叶兰_InfoQ精选文章