您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

人们在用 WebAssembly 构建什么应用?

时间:2023-01-07 11:35:32  来源:今日头条  作者:启辰8

WebAssembly (WASM) 在过去几年一直是一个流行词。 这是一项引起广泛关注但在实践中应用较少的技术。 我一直很好奇它的现状,所以我调查并总结了我的发现。 其中一些可能会让您大吃一惊。

背景

在 WebAssembly 标准问世之前,JAVAscript 是 Web 浏览器唯一支持的编程语言。 然而,WASM 从未被创建为 JavaScript 的替代品,而且它不能因为语言太低级了。 相反,它专门用于补充 Javascript 并解决其在执行计算和内存密集型任务(视频编辑、游戏、CAD 等)时的性能问题。


 

但是,随着它的发展,还会启用一些有趣且意想不到的副作用场景,正如您将在本文中看到的那样。

在我们继续之前的一些快速说明:

您不直接编写 WASM。 相反,您可以使用 C++ 或 Rust 等高级语言并编译为 WASM。

它以紧凑的二进制格式存储(如机器代码)。

它在安全、隔离的沙箱中执行。

就其本身而言,除了快速处理大量数字外,它并没有做太多事情。 没有网络,没有文件系统,也没有 DOM 访问。

人们使用 WebAssembly 构建的内容可以分为两类:在浏览器中和在服务器中。

在浏览器上

人们在浏览器中使用 WebAssembly 主要出于三个原因:

优化计算和资源密集型任务的性能。

将遗留的本机应用程序迁移到 Web 应用程序。

允许 Javascript 以外的语言在浏览器中运行。

让我们探索这些用例的一些成功的。

Figma


 

如果您是 UI/UX 设计师或时不时搞砸您的设计的开发人员,那么在过去的一年里您不可能错过 Figma。 这是一款出色的产品,展示了当今网络应用程序可以拥有的最先进性能。

WebAssembly 是 Figma 成功的秘诀之一。 令许多人惊讶的是,虽然是一个网络应用程序,但 Figma 的编辑器是用 C++ 编写的,甚至在 WebAssembly 出现之前。 鉴于浏览器仅执行 Javascript,这怎么可能? 答案很简单; C++ 代码在交付到 Web 之前被转换为 Javascript。

但为什么不从一开始就使用 Javascript 呢? 关键的区别在于 C++ 代码是如何转换为 JS 的。 Javascript 是一种非常动态的语言。 为了让它运行得更快,浏览器引擎做了很多魔术来动态优化它。 然而,结果仍然是次优且不可预测的。 有一种方法可以使用 Javascript 获得更好的性能 - 编写代码更像您使用静态语言的方式,以便引擎更容易处理。 Figma 最初使用“asm.js”来实现目标——它本质上是一个以高性能方式将 C++ 代码转换为 Javascript 代码的转译器。

不过归根结底还是Javascript代码,通过网络加载并不紧凑,浏览器还需要解析它的文本。 这就是 WebAssembly 胜过之前方法的地方。 WASM 是一种面向机器的代码。 它比 Javascript 更紧凑,浏览器的处理成本也更低。 通过从 asm.js 迁移到 WebAssebmly,Figma 获得了 3 倍的性能提升。


 

AutoCAD


 

作为 1982 年创建的产品,AutoCad 比 Web 还早,而且规模庞大——它有高达 1500 万行的 C++ 代码。 很长一段时间以来,它一直想转移到网络上,但是用 Javascript 重写所有东西是不切实际的:大量的工作和更慢的结果产品。 最后,WebAssembly 作为救世主来了。

在许多方面,AutoCAD 对 WebAssembly 的使用类似于 Figma,只是它有一个额外的问题,即对 windows 操作系统的紧密依赖需要解决。 然而,看到 WebAssembly 作为一项相对较新的技术能够支持如此庞大而复杂的应用程序并使其在现代焕然一新,仍然令人惊叹。

顺便说一下,在 WebAssembly 的帮助下,Adobe Photoshop 也搬到了网络上。

Microsoft Blazor


 

Blazor 是 Microsoft 通过 WebAssembly 使用其主要后端语言 C# 开发 Web 前端的产品。 正如它的口号所说,目标是在不编写 Javascript 的情况下构建全栈 Web 应用程序,但为什么呢? 这个想法可能是微软开发人员非常喜欢 C# 并希望在任何地方都使用它。

// A Blazor component@page "/counter"CounterCounter

Current count: @currentCount

Click me// C# below@code {private int currentCount = 0;[Parameter]public int IncrementAmount { get; set; } = 1;private void IncrementCount()currentCount += IncrementAmount;

接触过微软生态的人可能会马上问:这是Silverlight复活了吗? 不,这不对。 Silverlight 是专有技术,需要安装,并且没有通用的浏览器支持。 相反,Blazor 基于 WebAssembly,它现在是 Web 标准的一部分。

尽管它的价值主张有点奇怪,但 Blazor 很好地展示了 WebAssembly 为浏览器带来更多编程语言的潜力。 我认为任何此类努力都不会威胁到 Javascript 的统治地位,但在某些有趣的小众场景中,这可能非常有用。 例如,直接在浏览器中运行 Python/ target=_blank class=infotextkey>Python,你可以在不运行本地 python 服务器的情况下使用 Jupyter notebook:


 

服务器端

WebAssembly 的创建者在创建该技术时可能已经想到了在非浏览器环境中运行的可能性,但是服务器端开发人员的热情却大大超出了他们的预期。

这种兴奋是可以理解的——WebAssembly 提供了一种在服务器上执行不受信任代码的理想方式——它具有可移植性、更易于保护、使用的内存比 JVM 或 Docker 少得多,并且是将许多高级语言编译成的自然目标。 对于托管在您的 IDC 中的长时间运行的 Web 服务器进程来说,这可能意义不大,但对于某些场景来说可能是有益的:

需要为其租户大规模运行短期例程的无服务器托管提供商 - 快速启动、低占用空间和沙盒至关重要。

支持运行用户或社区提供的插件的 SaaS 产品

资源非常紧张的边缘环境

WASI 规范的创建开启了服务器端 WASM 的蓬勃发展。 WASI 是 WASM 的同行规范,旨在标准化 WASM 代码如何与其托管环境交互。 在浏览器中,这不是必需的,因为 WASM 是对 Javascript 的增强,它已经可以通过 DOM、BOM 和 Web API 访问其托管环境(浏览器)。 在服务器上时,WASM 是独立的,如果它不能与其环境交互,它就不是很有用。

如果您对现实世界的进展感兴趣,请查看以下将服务器端 WASM 包装到服务中的公司。 随着技术的成熟,它们可能成为传统的基于容器的 PaaS/FaaS 供应商的严峻挑战者。 很长一段时间以来,云业务一直渴望小型、可移植、安全的应用程序运行时。

Cosmonic


 

Fermyon


 

What's Next

WebAssembly 仍然是一项年轻的技术。 在浏览器端,用例是可靠的。 然而,它仍然需要发展成为一种更令人愉快的开发方式——今天,你不能像 ES 模块那样直接加载 WASM,需要复杂的 Javascript 胶水代码来连接它。 在服务器端,它更不成熟,它的价值值得商榷。 它等待着主要的行业参与者对其下注并加速其采用。

看看 WebAssembly 将如何在 2023 年进一步突破 Web 开发的界限将会很有趣。



Tags: WebAssembly   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
WebAssembly (WASM) 在过去几年一直是一个流行词。 这是一项引起广泛关注但在实践中应用较少的技术。 我一直很好奇它的现状,所以我调查并总结了我的发现。 其中一些可能会让...【详细内容】
2023-01-07  Tags: WebAssembly  点击:(0)  评论:(0)  加入收藏
了解有关在 Web 浏览器中运行任何代码的最新方法的更多信息。-- Mike Bursell(作者) 如果你还没有听说过 WebAssembly ,那么你很快就会知道。这是业界最保密的秘密之一,但它无...【详细内容】
2020-01-27  Tags: WebAssembly  点击:(155)  评论:(0)  加入收藏
▌简易百科推荐
让我们深入探讨 DevOps 和 DevSecOps 管道中密码密钥管理的各个方面。 当今的数字业务有望以闪电般的速度创新、执行和发布产品。自动化工具的广泛采用,加上 DevOps 和DevSec...【详细内容】
2023-01-09  qaseven     Tags:软件开发   点击:(1)  评论:(0)  加入收藏
WebAssembly (WASM) 在过去几年一直是一个流行词。 这是一项引起广泛关注但在实践中应用较少的技术。 我一直很好奇它的现状,所以我调查并总结了我的发现。 其中一些可能会让...【详细内容】
2023-01-07  启辰8  今日头条  Tags: WebAssembly   点击:(0)  评论:(0)  加入收藏
前言项目是基于swoole开发,框架也是公司内自己开发的框架,并没有用外界热门的swoole框架,swoole是4.0.0版本。项目需要执行大量的自动任务,框架是通过swoole的sendMessage方法将...【详细内容】
2022-12-29  博读代码  51CTO  Tags:后端   点击:(10)  评论:(0)  加入收藏
现在的各种开源项目中使用 Vue 的越来越多了,作为一个后端程序员不会点 Vue 也都玩不转了。所以抽空学习了一下 Vue 的简单用法,整理成笔记,方便有需要的同学一起学习。Vue 是...【详细内容】
2022-12-28  猿来猿往  今日头条  Tags:VUE   点击:(14)  评论:(0)  加入收藏
C语言几乎唯一的缺点就是,需要手动管理内存。抛开这点之外,我觉得其他语言都不如C语言[呲牙]所以,虽然自动内存管理比较复杂,但我还是给scf编译器框架加了静态的GC算法。在编程...【详细内容】
2022-12-27  底层技术栈  今日头条  Tags:编译器   点击:(14)  评论:(0)  加入收藏
编译器在经过词法分析、语法分析之后,就把源代码变成了抽象语法树(AST)。接下来,编译器的任务就是把AST变成机器码。AST,是一个表示代码逻辑的树形结构,它是不能直接顺序遍历的,而...【详细内容】
2022-12-26  底层技术栈  今日头条  Tags:编译   点击:(13)  评论:(0)  加入收藏
大家在平时的开发过程中估计不会经常碰到需要主动取消一个 Fetch 请求的需求,所以一部分同学可能对这一块知识不是很了解。没有关系,看完这篇文章你就能够掌握关于如何终止一...【详细内容】
2022-12-25  嘻呱互联   网易号  Tags: Promise   点击:(12)  评论:(0)  加入收藏
很早前就想写一篇关于 eBPF 的文章,但是迟迟没有动手,这两天有点时间,所以就来写一篇。这文章主要还是简单的介绍 eBPF 是用来干什么的,并通过几个示例来介绍是怎么玩的。这个技...【详细内容】
2022-12-24   IT架构师联盟     Tags:eBPF   点击:(4)  评论:(0)  加入收藏
了解过lombok底层原理的都知道其使用的就是的插入式注解,那么今天笔者就以真实场景演示一下插入式注解的使用。需求我们为公司提供了一套通用的java基础组件包,组件包内有不同...【详细内容】
2022-12-16  王路飞学Java  今日头条  Tags:插入式注解   点击:(15)  评论:(0)  加入收藏
不知道有没有这样的兄弟,学习 Vite 的时候,官网上各种配置看的是眼花缭乱。不知道哪些需要掌握,哪些只用简单了解一下。为了提高大家的效率,我把项目中常用的配置梳理了一下分享...【详细内容】
2022-12-15  前端阿飞V  今日头条  Tags:Vite   点击:(65)  评论:(0)  加入收藏
站内最新
站内热门
站内头条