WebAssembly卡通入门

WebAssembly 速度很快。你可能听说过。但究竟是什么让 WebAssembly 如此快速呢?

在本系列文章中,我想向你解释 WebAssembly 为什么速度很快。

等等,那么 WebAssembly 到底是什么呢?

WebAssembly 是一种将用除 JavaScript 以外的编程语言编写的代码在浏览器中运行的方法。因此,当人们说 WebAssembly 速度很快时,他们比较的对象是 JavaScript。

现在,我不想暗示这是一个非此即彼的情况——要么使用 WebAssembly,要么使用 JavaScript。事实上,我们预计开发人员将在同一个应用程序中同时使用 WebAssembly 和 JavaScript。

但是,比较两者是有用的,这样你就可以理解 WebAssembly 将产生的潜在影响。

一点性能历史

JavaScript 于 1995 年诞生。它最初并非设计为快速执行的,并且在最初的十年里,它的速度确实不快。

然后,浏览器开始变得更具竞争力。

2008 年,一个被称为“性能大战”的时期开始了。多个浏览器添加了即时编译器,也称为 JIT。当 JavaScript 运行时,JIT 可以识别模式并根据这些模式使代码运行得更快。

这些 JIT 的引入导致了 JavaScript 性能的一个拐点。JS 执行速度提高了 10 倍。

A graph showing JS execution performance increasing sharply in 2008

凭借这种改进的性能,JavaScript 开始被用于人们从未预料到的用途,例如使用 Node.js 进行服务器端编程。性能的提升使其能够应用于一类全新的问题。

现在,我们可能正处于另一个拐点,即 WebAssembly 的拐点。

A graph showing another performance spike in 2017 with a question mark next to it

因此,让我们深入细节,了解是什么让 WebAssembly 如此快速。

背景

WebAssembly,现在

WebAssembly,未来

关于 Lin Clark

Lin 在 Mozilla 的高级开发部门工作,专注于 Rust 和 WebAssembly。

更多 Lin Clark 的文章…


22 条评论

  1. Andrew Wooldridge

    很棒的文章!希望有更多图表!

    2017年2月28日 20:43

  2. Martin

    这似乎是系列文章中的第一篇,但我没有看到“下一页”按钮或链接。我如何才能看到第二部分?

    2017年3月2日 02:29

    1. Lin Clark

      文章底部有 5 个链接。

      2017年3月2日 07:07

  3. newton

    我们所有的网民都应该对浏览器的内容有所了解,以便更好地利用它提供的各种优点。现在,随着我在互联网上拥有更多经验,我更好地使用了我们强大的 Mozilla。

    2017年3月2日 08:56

  4. Michaela

    看起来不错,Lin,但对我来说链接太多了。
    如何添加“查看单页”选项?

    2017年3月2日 10:19

    1. Lin Clark

      我们的 CMS 没有这种灵活性,但我们计划将其发布为小型电子书。

      2017年3月2日 10:41

  5. erdees

    很棒的文章!:)

    2017年3月2日 11:00

  6. FRANK CARDENAS

    我喜欢它。

    2017年3月2日 17:06

  7. ducnguyen.info

    很棒的文章

    2017年3月2日 17:13

  8. Abdul Rahman Bin Bujang

    我第一次接触到同样的情况,还有其他我可以更新、下载和删除的东西吗?

    2017年3月3日 00:21

  9. Estelle Bonilla

    期待更多信息。需要更多关于新 Web 浏览器的信息,以及它将如何提供帮助。

    2017年3月3日 10:03

  10. songwon

    哇...这篇文章非常简单易懂。

    2017年3月3日 20:46

  11. 0918nobita

    我是日本人。请问我是否可以在 Qiita(技术博客)上发布本文的翻译版?

    2017年3月4日 01:47

    1. Lin Clark

      当然可以!请确保提供署名并链接回原文。当您完成翻译后,请告知我们,我们社区中的日语母语人士会对其进行审核。审核完成后,我们会添加您翻译版本的链接。

      2017年3月4日 06:56

      1. 0918nobita

        抱歉让您久等了。我在 Qiita 上发布了翻译版本,除了知道其 URL 的人之外,其他人无法浏览。我们恳请您确认。→ http://qiita.com/0918nobita/private/c69bc926431c6b32cc37

        2017年3月5日 03:09

        1. Lin Clark

          太好了,我会将其发送进行审核。

          2017年3月5日 08:15

  12. Eric Ding

    嗨,Lin

    感谢您如此有趣的介绍:)
    我正在考虑将 Windows 应用程序(.exe)迁移到 WebAssembly 加载项,并且我对 WebAssembly 有两个问题
    1. Google WebRTC 的支持。我的应用程序(类似于 Peer5:https://www.peer5.com/faqhttp://bloggeek.me/peer5-webrtc-interview/)利用 WebRTC 的数据通道在用户之间共享文件。
    是否可以将 C++ 中的数据通道转换为 WebAssembly?它是否经过了充分测试?

    2. 软件保护。WebAssembly 的本质只是 JavaScript,这意味着所有内容都是公开的。
    由于 WebAssembly 正在扮演越来越重要的应用程序角色,行业/W3C 工作组/或四大浏览器公司是否考虑过
    软件保护?我的应用程序可以随意复制,但我引入了不错的工具:VMProtect 来防止人们理解/调试它。
    如果我将我的应用程序转换为 WebAssembly,我是否仍然可以这样做?如果他们坚持开源,为什么这些公司不公开浏览器的源代码?

    此致!

    Eric Ding

    2017年3月7日 21:17

  13. Clem

    非常感谢

    2017年3月20日 04:46

  14. David

    很棒的文章,非常有帮助。

    我目前正在尝试使用 WASM。不幸的是,我的 C++ 源代码(我目前将其作为 Windows dll 发布)存在法律限制,禁止我在团队外部共享源代码。如果我将其作为 .wasm 发布到 Web 上,其他人是否能够“反编译”它以揭示原始源代码?

    2017年3月21日 11:02

    1. Lin Clark

      有人在讨论为 WebAssembly 添加一种类似于源代码映射的支持。这将是您可以选择与 .wasm 文件一起提供的功能,以允许人们逐步执行和调试源代码。但是,即使在发生这种情况后,您也可以控制是否与 .wasm 文件一起提供源代码映射信息。

      2017年3月22日 10:55

      1. David

        因此,如果我不提供源代码映射,则原始源代码的 IP 在 .wasm 中受到的保护与我发布 .dll 时一样。

        这听起来很理想。非常感谢。

        2017年3月22日 11:49

  15. Mohammad Elbanna

    您好,

    感谢 Lin 的所有努力。
    不幸的是,我无法看到所有图片(所有图片都显示 404)。
    是否有希望解决此问题?

    2017年3月25日 14:19

本文的评论已关闭。