2KB项目,专业的源码交易网站 帮助 收藏 每日签到

WebAssembly 的未来:成长技能树

  • 时间:2019-01-23 18:23 编辑:2KB 来源:2KB.COM 阅读:488
  • 扫一扫,手机访问
  • 分享
摘要: 英文原文:Web
英文原文:WebAssembly’s post-MVP future: A cartoon skill tree

人们对WebAssembly有些误解。他们认为在2017年登陆浏览器的WebAssembly - 我们称之为WebAssembly的最小可行产品(或MVP) - 是WebAssembly的最终版本。

我可以理解这类误解来自何处。WebAssembly社区组实际上致力于后向兼容。这意味着你今天所创建的WebAssembly将继续在未来的某版浏览器上工作。

但这并不意味着WebAssembly是功能完整的。事实上,它远非如此。WebAssembly将会有许多功能,它们将从根本上改变你使用WebAssembly所能做的事情。

我认为这些未来的功能有点像电子游戏中的技能树。我们已经完全掌握了这些技能中的前几项,但我们还需要完善下面的整个技能树来解锁所有应用程序。

Skill tree showing WebAssembly skills which will be filled in through the course of the post.

那么让我们看看已经存在的概念,然后我们就可以看到未来的将会有哪些新的东西。

Minimum Viable Product (MVP) 最小可行产品

WebAssembly故事的最开始于Emscripten,它可以通过将C ++代码转译为JavaScript实现了在Web上运行C++代码。这使得有可能将大量现有的C++代码库(如游戏和桌面应用程序)带入到Web中。

但它自动生成的JS仍然比作为对比的原生代码慢得多。但Mozilla工程师发现了一个隐藏在所生成的JavaScript中的类型系统,并给出了如何使JavaScript运行得飞快的方法。这个JavaScript子集被命名为asm.js

其他浏览器供应商看到asm.js的速度有多快之后,他们也开始向他们自己的引擎中添加同样的优化处理。

但这并不是故事的结束。这只是一个开始。引擎自身可以做些事情使其运行更快。

但他们无法在JavaScript本身中做到这一点。因此,他们需要一种新的语言 - 专门为编译而设计的语言。这就是WebAssembly。

那么第一版WebAssembly需要哪些技能呢?我们需要什么才能实现可以在网络上有效运行C和C++的最小可行产品呢?

技能: 编译目标

使用WebAssembly的人知道他们不想仅支持C和C++。他们希望能够将许多不同的语言编译为WebAssembly。所以他们需要一个与语言无关的编译目标。

他们需要类似汇编语言这样的东西,像桌面应用程序可被编译成x86一样。但这种汇编语言不适用于实际的物理机。这将是一个概念机。

技能: 快速执行

编译目标必须被设计,以便它可以非常快地运行。否则,在Web上运行的WebAssembly应用程序将无法满足用户对平滑交互和游戏的期望。

技巧: 紧凑

除了执行时间,加载时间也需要快。 用户对某些内容的加载速度有一定的期望。 对于桌面应用程序,由于应用程序已安装在您的计算机上,因此它们会快速加载。 对于 Web 应用程序,因为 Web 应用程序通常不必加载与桌面应用程序一样多的代码,用户也期望加载很快。

但是,当你将这两件事结合起来时,它会变得棘手。 桌面应用程序通常是相当大的代码库。 因此,如果它们在网络上,当用户第一次访问 URL 时,需要下载和编译很多内容。

为了满足这些期望,我们需要我们的编译器目标是紧凑的。 这样,它可以快速通过网络传输。

技能:线性内存

除了执行时间,加载时间也需要快速。用户对某些内容的加载速度有一定的期望。对于桌面应用程序来说,由于应用程序已安装在你的计算机上,因此对它们的期望是快速加载。对于 Web 应用程序,期望也是加载时间能够尽可能短,因为 Web 应用程序通常不必加载与桌面应用程序一样多的代码。

但是,当你将这两件事结合起来时,它会变得很棘手。桌面应用程序通常是相当庞大的代码库。因此,如果它们位于网络上,当用户第一次访问此 URL 时,需要下载和编译很多内容。

为了满足这些预期,我们需要我们的编译器目标是紧凑的。这样,它可以快速通过网络进行传输。

技能:线性内存

这些语言还需要能够以不同于 JavaScript 使用内存的方式使用内存。他们需要能够直接管理他们的内存 —— 能区分出哪些字节一起使用。

这是因为像 C 和 C++ 这样的语言有一个叫做指针的底层特性。你可以拥有一个没有值的,但具有该值的内存地址的变量。因此,如果你要支持指针,程序需要能够从特定地址进行写入和读取。

但是,你无法实现从网上下载的程序可无限访问内存中的字节,任意访问它们想访问的地址。因此,为了创建一种对内存访问的安全方式,就像使用原生程序做法一样,我们必须创建一些可以对特定区域内存访问的东西,并且别无它法。

为此,WebAssembly 使用线性内存模型。这是使用 TypedArrays 实现的。它基本上就像一个 JavaScript 数组,除了这个数组是仅包含字节的内存。当你访问其中的数据时,你只需使用数组索引,你可以将其视为内存地址。这意味着你可以假装这个数组是 C++ 中的内存。

已解锁成就

因此,使用所有这些技能,人们可以在浏览器中运行桌面应用程序和游戏,就好像他们在其计算机上本机运行一样。

这几乎就是 WebAssembly 作为 MVP 发布时的大致技能。它确实是MVP——最小可行产品。

它还支持某些类型的应用程序正常工作,但仍有许多其他技能可解锁。

重量级桌面应用程序

下一个解锁的成就是更重量级的桌面应用程序。

你能设想像 Photoshop 这样的应用程序在你的浏览器中运行的场景吗? 如果你可以像使用 Gmail 一样在任何设备上即时加载它呢?

我们已经开始见证这样的事情。例如,Autodesk 的 AutoCAD 团队已使其 CAD 软件在浏览器中可用。Adobe 已经使用 WebAssembly 通过浏览器提供了 Lightroom。

但这也有一些我们还需要增加的功能,以确保所有这些应用程序 —— 即使是最最重量级的应用在浏览器中也能运行良好。

技能: 线程化

首先,我们需要支持多线程。现代计算机拥有多核。这些基本上是多个可并行处理问题的大脑。这可以使事情完成更快,但是为了使用这些核,你需要支持线程。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部