WebAssembly 入门课
于航
PayPal 高级软件工程师
10751 人已学习
新⼈⾸单¥29
登录后,你可以任选4讲全文学习
课程目录
已完结/共 23 讲
结束语 (1讲)
WebAssembly 入门课
15
15
1.0x
00:00/00:00
登录|注册

02 | 历史篇:为什么会有 WebAssembly 这样一门技术?

你好,我是于航。
在开始真正学习 Wasm 这门技术之前,我想先来问你一个问题:你有没有思考过,在 Web 技术的历史发展长河中,为什么会出现 Wasm 这样一门技术?现有的这些 Web 技术,又存在着哪些无法解决的问题?
要知道,所有新兴技术的诞生都一定有它存在的意义,或者要去解决的问题。比如 jQuery 之于浏览器的兼容性、Vue.js / React.js 之于 Web 应用的构建模式。
虽然用前端框架和库来类比 Wasm 不算十分合适,但我想阐述的是,Wasm 的出现也并非偶然。在这节课的内容中,我们就来一起看看 Wasm 诞生背后的那些故事。相信在学习完本课程后,你会对 Wasm 有了一些新的了解。而这些了解有时可能比一项技术本身更加重要。

JavaScript 的发展和困境

1995 年末,Brendan Eich 仅用了 10 天时间便发明出了 JavaScript 编程语言,而在随后的二十多年中,JavaScript 已经成为了不可动摇的,用于开发 Web 前端应用的必备编程语言之一。
不仅如此,随着后来诸如 React Native、Electron 以及 Vue.js 等各类框架的不断涌现,JavaScript 曾经一度成为 GitHub 语言排行榜的年度冠军。JavaScript 也因此被广泛应用到了各行各业、各个领域的各类项目中。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

WebAssembly(Wasm)作为新兴技术,旨在解决现有Web技术面临的性能和类型支持问题。文章首先回顾了JavaScript的发展历程和其在Web应用中的困境。随着Web应用规模的增长,浏览器性能优化与Web应用规模日益增大之间的“不协调”成为了一个问题。同时,JavaScript的弱类型特性也给浏览器在面对庞大Web应用时带来了性能开销。Wasm的出现正是为了解决这些问题,它可以提供更高效的性能和更好的类型支持。Wasm的前身包括NaCl、PNaCl和ASM.js,它们都是为了提供更高性能的Web应用而产生的技术。然而,它们都存在着各自的问题和局限性。Wasm的诞生是为了继承并解决这些技术的问题,从而更好地满足现代Web应用的需求。Wasm的设计目标是为了能够在JavaScript之外,提供一种高效的实现可能,为构建更高性能的Web应用提供支持。Chrome V8团队在设计和实现Wasm时参考了之前技术的优缺点,以避免重复走过的弯路。因此,Wasm以一种更好的方式展现在人们的面前,为应对Web应用的挑战提供了新的可能性。 WebAssembly(Wasm)作为新兴技术,旨在解决现有Web技术面临的性能和类型支持问题。文章首先回顾了JavaScript的发展历程和其在Web应用中的困境。随着Web应用规模的增长,浏览器性能优化与Web应用规模日益增大之间的“不协调”成为了一个问题。同时,JavaScript的弱类型特性也给浏览器在面对庞大Web应用时带来了性能开销。Wasm的出现正是为了解决这些问题,它可以提供更高效的性能和更好的类型支持。Wasm的前身包括NaCl、PNaCl和ASM.js,它们都是为了提供更高性能的Web应用而产生的技术。然而,它们都存在着各自的问题和局限性。Wasm的诞生是为了继承并解决这些技术的问题,从而更好地满足现代Web应用的需求。Wasm的设计目标是为了能够在JavaScript之外,提供一种高效的实现可能,为构建更高性能的Web应用提供支持。Chrome V8团队在设计和实现Wasm时参考了之前技术的优缺点,以避免重复走过的弯路。因此,Wasm以一种更好的方式展现在人们的面前,为应对Web应用的挑战提供了新的可能性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《WebAssembly 入门课》
新⼈⾸单¥29
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • Cryhard
    ES6等后续版本如果解决了浏览器兼容性问题,后续不再需要“编译”回老版脚本语言,从而获得了性能保障。这样的情况是否会成为wasm的重大阻碍呢?

    作者回复: 直接运行 ES6 代码的尝试其实有很多企业很早就在尝试,但大家都相对比较保守,还是会去兼容老一代的浏览器。就性能提升来讲,就算是直接运行 ES6 的代码,JavaScript 引擎也同样还是需要经历生成 AST,Profiling,Lowering,以及 Optimization 和 De-optimization 的过程,因此相较于 Wasm 在整个引擎 Pipeline 中更加靠后的位置,性能上也还是无法比拟的。况且性能也只是 Wasm 的一方面特性,另一个“历史代码可复用性”的特征我们也同样需要关注。因此其实两者不会有太多的重叠,更不会阻碍 Wasm 的发展。

    2020-09-08
    11
  • Jupiter
    老师好,Typescript 可以设置参数类型,现在的项目中也经常使用,但是最后Typescript的代码也会被解释成Javascript, 所以Typescripts是不是只是规范程序员写代码,对于应用的性能其实没有什么帮助?

    作者回复: 你可以参考一个名为 AssemblyScript 的项目。这个项目就是基于 TS 语法设计的,可以将以 TS 语法编写的代码编译为 Wasm 格式。通常来讲,在日常的 Web 开发中,由于 TS 需要被编译为 JS,所以对于最终的代码执行性能是没有什么影响的。但 TS 的类型信息在对于编译到 Wasm 来说,还是可以被参考的。

    2020-09-08
    9
  • Vfeelit
    JS虽然动态,在TS把持下,jit 不进行或几乎不进行反优化,性能已经相当不错了吧。wasm不也通过vm转一圈最终产生机器码?

    作者回复: 实际上还是有很大差别的,借助于 TS 确实可以解决“去优化”的问题,但对于 JS 还是要通过:生成 AST、生成 IR、Lowering、优化编译器、Profiling、生成机器码这些步骤的。但对于 Wasm,仅需要“生成机器码”这一步基本就够了,大部分优化在静态编译时就已经完成了,引擎只需要对照 Wasm 的 ISA 翻译成目标机器的 ISA 就可以了,基本上只是一个汇编器的作用,而且目前也不需要静态链接。

    2021-01-13
    4
  • Vfeelit
    实现wasm的是虚拟机,任何语言,编译为某个中间语言并不是很困难的事。类似基于jvm, 它之上除了java还有其他语言,虽然都是基于jvm,但生态各不同。wasm 相比下不过就是一套vm规范,没有那么大想象力啊

    作者回复: 就本质而言的话确实是这样,类似 JVM 只是一套新的 V-ISA 标准。但目前来看其不同在于: 1、Wasm 可以用于 Web(起源); 2、WASI 提供了一套 out-of-web 的操作系统接口标准,并且基于 capability-based security 可以提供更加安全的上层应用实现(本身基于 Wasm)。无论是安全的代码复用,还是基于 VM 层的轻量级沙盒环境,都是很有价值和发挥空间的。

    2021-01-13
    1
  • donglin
    文中说ASM.js会被编译成机器码保存,下次再次执行时便会直接使用已保存的机器码,从而提高性能。 这个不就是JIT机制嘛,但在iOS上是禁止的啊,所以ASM.js在iOS上也无法提高性能?

    作者回复: 相对来说是的,或许浏览器可以利用 ASM.js 中标注的类型做一些额外优化,但整体性能提升肯定不会太明显。

    2022-10-11归属地:北京
  • Carpe
    “据相关数据统计,截止 2019 年底,全世界一共有约 16 亿个可索引网页,而其中的 95% 都在使用 JavaScript。”数据来源于哪?

    作者回复: 我是直接 Google 搜 “How many websites use JavaScript.” 直接显示的结果,当然数据仅供参考哈。

    2022-09-28归属地:四川
  • 地球外地人
    老师好,感觉ts代码虽然被编译成了js,但是转换后的js代码内部也避免了很多类型转换的问题,js引擎对于这一部分没有什么正反馈吗

    作者回复: 会有一部分。由于 TS 的类型信息并没有给到 JavaScript 引擎来使用,所以即便整个程序是 well-organized 的,但是 JavaScript 引擎仍然还是需要通过运行时推导来推测出变量的具体类型。但也有的好处是,JIT 在假设某个变量的类型时,基本上都可以保证是正确的。这样引擎的去优化过程就会减少很多,性能会相对提高。

    2020-09-17
  • 郭纯
    在 web vr 领域下 场景中会设计到很多模型和特效如果大规模进行平移 旋转 缩放我感觉很适合 wasm 场景.

    作者回复: 嗯嗯是的,不过现在有 WebXR 这个 W3C 的草案了。如果浏览器能够 ship,就会有专门的 Native API 来用于 Web VR 应用的开发。不过目前看还为时尚早,Wasm 可以作为次级兼容的一个优秀备选方案。

    2020-09-14
  • 浩明啦
    评论里老师说AssemblyScript这个,我刚刚扫了一眼,我们现在ts的项目也能用这个来编译用到生产环境上么? 不过很多的那些react 和vue框架打包后为啥不直接编译wasm呢?

    作者回复: AssemblyScript 其实只是基于 TS 的语法而已,实际在应用时需要进行一些改动以适配 Wasm 标准以及浏览器上的运行时环境,所以直接编译前端的 TS 项目应该是不行的。现代前端开发框架由于需要与 Web API 打交道,因此实际上在编译到 Wasm 后,对框架的性能提升暂时还看不到可观的收益。关于前端框架与 Wasm 之间的关系,可以关注课程后面的文章哈。

    2020-09-11
  • 余文郁
    老师,ecma标准文档和Chrome官方文档地址可以分享一下吗

    作者回复: EMCA:https://www.ecma-international.org/ecma-262/ NaCl/PNaCl:https://developer.chrome.com/native-client/nacl-and-pnacl

    2020-09-07
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部