WebAssembly场景及未来

引言

从前面的文章中,我们已经了解了 WebAssembly(WASM) 的基本知识,演进历程,以及简单的使用方法。通过全面了解了WebAssembly的设计初衷和优势,我们接下来要知道在什么样的场景中我们会使用 WASM 呢?在这些不同的场景下,我们是如何使用 WASM 的呢?

在这一章中 ,我们将会讨论一下 WASM 的在业界的使用场景

应用场景概览

通过现有的认知,我们已经知道在web中wasm的高性能表现,使得其在越来越多的web应用开发中大展拳脚。随着WebAssembly技术的发展,它的很多能力被开发完善,基于如下能力:

  • 加速基于浏览器的应用运行速度,来在一定程度上替代 JavaScript。

  • 将不同的编程语言编译成 WASM 来提供它们之间的互操作的可能。

  • 安全的应用沙盒环境可为宿主环境(Host)提供一定的安全保障。

使它能够在包括浏览器在内的很多不同的环境中运行。这些场景包括:云原生场景、移动设备、物联网、区块链等多种不同的场景。

下图中充分说明了,WASM 在不同场景中的使用情况。

从图中我们可以看出:

  1. WebAssembly最多的应用场景依然是在Web站点开发上,大约占65%。

  2. WebAssembly 在云原生和容器化方面的应用大幅增加,由去年的20%提升到了35%。

  3. 增长幅度最大的是在插件扩展方向,WebAssembly的沙盒化安全环境很适合用于托管不受信任的第三方代码。

在不同的领域中, WASM 有着不同程度的应用。目前有大量的公司和组织在使用 WASM 或者参与 WASM 生态的建设,可观下图:

WASI

很多人可能疑惑为什么突然提到这个技术概念,因为WebAssembly是不止跑在浏览器里的前端技术,WebAssembly有着更远大的的宏图大业。

Docker的创始人Solomon Hykes曾发推文说到:在2008年如果WASM和 WASI(WebAssembly System Interface, WASM系统接口)这两个已经存在了的话,我们就没有必要创立 Docker了。在服务器上运行WebAssembly是计算的未来,但缺少的是一个标准的系统接口希望WASI可以成为它​。

WASI(WebAssembly System Interface, WASM系统接口),系统接口指的就是例如文件操作、网络连接、系统时钟、随机数之类的操作系统调用,开发WASI的唯一目的就是将WebAssembly向浏览器之外推进,最终能够真正做到一份wasm代码运行在所有不同环境不同操作系统的机器中。

WebAssembly运行在浏览器内,与系统交互靠的是JS胶水语言的能力,JS通过浏览器内核再到操作系统内核。而WebAssembly脱离了浏览器后,运行在各个操作系统中也需要抹平系统api的差异性,这就是WASI需要解决的问题。

WASI只是一个标准,业界也有一些实现方案,有些实现方案已经能做到生产环境使用了。正因为WASI的标准提出,才能让WebAssembly这个崛起于前端的技术,在其他领域有着比他在前端更广阔​的天地。

应用场景细化

1.web应用

1.1视频编解码

WASM 可以用于视频编解码,在 WASM 中实现的视频解码器可以用于在浏览器中播放视频,目前 H5 支持的视频格式有限,主要是三种:MP4, WebM 和 Ogg,而且不同浏览器支持的格式也不同,所以视频类公司需要解决如何在网页中播放其它格式视频的问题,比如:爱奇艺、b站

从爱奇艺的技术博客中,我们得知由于之前使用的是 JavaScript,其运行效率较低。在引入了 WASM 技术之后替换 JavaScript 来进行转封装之后,他们发现浏览器中播放视频的性能提高了将近 20%。下图为爱奇艺直播使用 WASM 之后的性能提高。

B站视频相关功能里也有大量的Wasm模块,因视频上传、封面图处理这些都是计算比较密集的场景,b站利用Wasm版FFmpeg来加速视频编解码以提高性能

1.2工具类

Figma在线UI设计

Figma 是一个浏览器应用,只要有浏览器就能使用。Figma利用WASM提高了他们的响应和载入速度。

Photoshop Web版:以前类似PS这种复杂的应用在web版是很难达到较好的用户体验的,然而通过使用各种新的Web技术,Photoshop 的公开测试版已经到来。这其中比较重要的就是WebAssembly技术的应用,除了解决性能问题,更重要的是充分利用了wasm的跨平台特性,使Photeshop在web端和PC端应用可以由同一份源码编译生成。

1.3浏览器平台的VR

VR概念的火爆,让很多人都想体验无需下载安装任何软件,直接在浏览器上体验虚拟现实。在虚拟现实(VR)场景中,响应速度是非常重要的。为了解决浏览器版本的延迟问题,人们会倾向于使用 WASM 。在论文中提供一种可为基于浏览器的应用程序带来近乎本地化的低延迟的解决方案,通过在任何 WiFi 或支持蜂窝数据网络的 AR/VR 设备上运行的 WASM 的字节码能在硬件平台上实现丰富的可操作性。

2.云原生

云原生是一种基于容器的应用开发和部署方式,它将应用程序打包成容器,然后将容器部署到云平台上,云原生的应用程序可以在任何地方运行,包括本地计算机、云平台、边缘计算设备等。

在云原生场景中,WASM 可以用于编写云原生应用程序,也可以用于编写云原生的基础设施。

2.1容器

​我们先来认识下容器的概念?容器是一种轻量级的虚拟化技术,它可以将应用程序和它的依赖打包在一个文件中,然后在不同的环境中运行。但容器一般都需要在宿主机的内核上运行,而不是直接运行在硬件上,所以导致性能会比较差

我们前面提到Docker的创始人对WASM技术是比较认同的,所以Docker也倾向于用WASM技术解决一些问题,在 2022 年 10 月底,Docker 宣布推出与 WASM 集成 ( Docker + WASM ) 的首个技术预览版,并表示公司已加入字节码联盟 ( Bytecode Alliance ) ( Bytecode Alliance 是 WASM 和 WebAssembly System Interface 背后的非营利组织),成为投票成员。目前开发者已经可以通过最新版的 Docker 快速构建面向 WASM 运行时的应用程序

Docker Engine创建了一个新的 Containerd Shim, 把负责容器进程运行的 runC 替换成 WasmEdge 运行时,Wasm Module 的启动和运行都依赖于 WASM 运行时环境。这部分是和 WasmEdge 合作的项目,这个 Containerd Shim 从 OCI artifact 中提取 WASM 模块,并使用 WasmEdge 运行时来运行。当然这里的 WasmEdge , 理论上可以把这部分扩展到 Wasmtime 等其他的 WASM 运行时。

2.2边缘计算

近几年云计算的蓬勃发展,边界不断扩展, “ Kubernetes + 容器”组合,自然也被很多人考虑部署到边缘侧,以提高边缘应用部署的效率和便利性。

但边缘设备硬件通常资源有限,无法满足部署运行完整的 Kubernetes的需求,而且很多边缘设备基于 ARM 架构,但Kubernetes 发行版对 ARM 架构的支持有限,这些问题都困扰着开发者使用Kubernetes在边缘计算的应用。当然业界也在不断为了解决以上问题进行探索,也有一些可供选择的技术解决方案,比如华为的 KubeEdge、阿里开源的 OpenYurt、腾讯开源的 SuperEdge等项目。

边缘计算需要更轻量、更快的容器方案,而WASM正是解决这些痛点的一个新机会。

WasmEdge是由Cloudflare、AWS等公司联合贡献的开源项目,其目标是构建一个高效、可靠、低延迟的边缘计算平台。

WasmEdge使用LLVM后端进行优化,提供了接近原生速度的执行效率,使得它能够在一个小型、轻量级的容器中高效运行复杂的计算任务,可应用于物联网(IoT)设备,实时处理传感器数据,提高响应速度,减轻云端负担。

2.3Serverless

WebAssembly是非常适合用作微服务和无服务平台的。后端即服务(Backend as a Service,BaaS),函数即服务(Function as a Service,FaaS)都可以归属到severless无服务模型。WebAssembly的启动时间相比docker或者其它VM要快很多,WebAssembly的运行时是非常"轻"的,启动一个WebAssembly实例只需要5微秒。除此之外,轻量级所带来的另外一个优势就是可以在一台机器上搭载更多实例。

3. IOT

随着世界变得更加互联,物联网 (IoT) 设备的数量呈爆炸式增长。这些设备具有各种形状和尺寸,从大型工业机器到微型传感器,这些设备的硬件参差不齐,某些设备对于功耗和性能还是有要求的,亟需高性能以及高可移植性的方案解决问题。而且某些Wasm 运行时支持 AoT编译,它采用 Wasm 字节码并为目标 CPU/MCU 类型生成机器码。这种方案解决了那些没有可用的 CPU 和内存来执行 JIT(即时)编译的微型物联网设备​。

4.游戏

主流游戏引擎(Unity/Unreal)已经支持编译目标为 WASM 。在发展早期,asm.js 曾是在浏览器环境运行这些引擎的解决方案。因为 WASM 解决了 asm.js 的痛点,相比之下速度更快,代码更少,使用内存量更少,所以现在 WASM 成为它们在浏览器环境中的默认编译目标。​​

​未来发展

目前 WASM 还在快速发展阶段,尽管它还存在一些局限性,但它在非web场景下的发展及应用还是让人眼前一亮的,未来可见的是会解决一些现有问题和增加特性。​比如:SIMD、并发等能力的支持和提升

  • 标准的演进:社区针对WASI标准目前有一些分歧,但标准对于行业的规范化发展还是必不可少的。而且现在科技巨头(Google、微软、亚马逊等)也开始认可WASM,相信他们在社区方面的积极推动能做出更多贡献。标准方面仍有重要的工作要做;WebAssembly对Web平台的API支持,例如支持操作DOM等,线程并发等都在激烈讨论中。

  • 编程语言和平台:WebAssembly会支持更多的编程语言和平台,像 C++ 、Go (包括 TinyGo )和 Rust 这样的语言已经接受了 WASM ,但一些最常见的语言,如 Python 、 Java 和 PHP 还在努力实现支持,在客户端和服务器端应用的范围将会更广泛。

  • ​开发体验更友好:WASM初期开发人员在一些大型复杂应用中使用该技术,难免会遇到各种问题,彼时WASM的工程化和工具链都不够成熟,比如调试在WASM就是一个让人头痛的问题,编译WASM和实际使用的开发链上也有不少可以提升和优化的工具。可猜测的未来WebAssembly开发工具和库会变得更加完善,例如IDE、调试工具、库等,使得WebAssembly的开发和调试更加容易和高效。

结语

本文我们已经讨论了WebAssembly 在各种不同场景的应用和未来的发展趋势。当然 WebAssembly 还处在发展的初期,有优势也有很多不完善的地方。随着WebAssembly在各个领域的应用,相信未来会有越来越多的开发者使用WebAssembly进行Web应用程序的开发,我们期待着WebAssembly能够更好地与其他技术交互和融合,为Web开发带来更高效、安全和优质的开发体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在门店里造绿色氧吧!康养行业也这么卷了?

拼啥不如拼健康,现在的人算是活明白了,不但中老年人这样想,年轻人也这样干。你可能不知道,现在众多健康养生门店,逐渐成了年轻人“组团养生”的好去处,也是他们吃喝玩乐之外的新兴消费趋势。 而在看得见的…

原理图设计工作平台:capture和capture CIS的区别在于有没有CIS模块

1环境:design entry CIS 2.参数设置命令options——preference(7个选项卡colors/print,grid display,miscellaneous,pan and zoom,select,text editor和board simulation) 1)颜色设置colors/p…

应急响应--网站(web)入侵篡改指南

免责声明:本文... 目录 被入侵常见现象: 首要任务: 分析思路: 演示案例: IIS&.NET-注入-基于时间配合日志分析 Apache&PHP-漏洞-基于漏洞配合日志分析 Tomcat&JSP-弱口令-基于后门配合日志分析 (推荐) Webshell 查杀-常规后门&…

linux内核定时器

文章目录 一、jiffies定时器1.1 工作原理1.2 timer_list结构体1.3 相关接口1.3.1 初始化和启动定时器1.3.2 修改定时器1.3.3 删除定时器1.3.4 jiffies相关接口 二、高精度定时器2.1 hrtimer结构体2.2 相关接口2.2.1 初始化和启动定时器2.2.2 取消定时器2.2.3 通过定时器实现周期…

shell-awk语法整理

shell-awk语法整理 前言基本语法内置变量1. $02. NF3. NR4. FS5. RS6. OFS7. ORS8. FILENAME9. FNR10. ARGV11. ENVIRON12. IGNORECASE13. RSTART 和 RLENGTH示例解释 内置函数循环语句(后面的;可不加)条件语句高级特性示例 特殊模式BEGINEND组合示例BEG…

R语言实战—圆形树状图

话不多说,先看最终效果: 圆形树状图是树状图的一个变型,其实都是层次聚类。 接下来看代码步骤: 首先要先安装两个包: install.packages("ggtree") install.packages("readxl") 咱就别问问什么…

29、php实现和为S的两个数字(含源码)

题目:php 实现 和为S的两个数字 描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数, 是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测…

go zero入门

一、goctl安装 goctl 是 go-zero 的内置脚手架,可以一键生成代码、文档、部署 k8s yaml、dockerfile 等。 # Go 1.16 及以后版本 go install github.com/zeromicro/go-zero/tools/goctllatest检查是否安装成功 $ goctl -v goctl version 1.6.6 darwin/amd64vscod…

vue2响应式原理+模拟实现v-model

效果 简述原理 配置对象传入vue实例 模板解析,遍历出所有文本节点,利用正则替换插值表达式为真实数据 data数据代理给vue实例,以后通过this.xxx访问 给每个dom节点增加观察者实例,由观察者群组管理,内部每一个键值…

sqlite 数据库 介绍

文章目录 前言一、什么是 SQLite ?二、语法三、SQLite 场景四、磁盘文件 前言 下载 目前已经出到了, Version 3.46.0 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是…

VMware虚拟机配置桥接网络

转载:虚拟机桥接网络配置 一、VMware三种网络连接方式 VMware提供了三种网络连接方式,VMnet0, VMnet1, Vmnet8,分别代表桥接,Host-only及NAT模式。在VMware的编辑-虚拟网络编辑器可看到对应三种连接方式的设置(如下图…

美好生活的 100 条建议

简介 一些简洁明了的人生建议,易于理解,并且能够为日常生活中的各个方面提供实用的指导。 财富 (Possessions) 1. If you want to find out about people’s opinions on a product, google \reddit. You’ll get real people arguing, as compared t…

SpringBoot2.2.6使用spring-boot-validation读取不到自定义配置文件中的属性

SpringBoot2.2.6没有做message.properties文件中属性的自动读取配置。解决方法有两种: 1. 升级springboot版本到2.6.x以上 2. 在现有springboot版本的基础上添加以下自定义配置: Configuration public class RequestParamValidationConfig implements…

学习笔记——交通安全分析12

目录 前言 当天学习笔记整理 4信控交叉口交通安全分析 结束语 前言 #随着上一轮SPSS学习完成之后,本人又开始了新教材《交通安全分析》的学习 #整理过程不易,喜欢UP就点个免费的关注趴 #本期内容接上一期11笔记 当天学习笔记整理 4信控交叉口交…

ORA-03115 ORA-06594--空间不足 rman 磁带压缩备份 控制文件恢复后备份信息丢失

---用旧的控制文件恢复后 这个控制文件本身的备份信息不在此还原出的控制文件中。所以这个备份的控制文件就删不掉,看不到。 但是只要设置正确的dbid,还是可以用恢复这个控制文件的 正常未恢复过controlfile的话,这个控制文件备份信息在现有…

Square Root SAM论文原理

文章目录 Square Root SAM论文原理核心原理SLAM问题的3种表示贝叶斯网络因子图(Factor graph)马尔科夫随机场(Markov Random Field, MRF) SLAM最小二乘问题&线性化因式分解 factorization矩阵与图(Matrices ⇔ Graphs)因式分解&变量消元(Factori…

Kafka系列之Kafka知识超强总结

一、Kafka简介 Kafka是什么 Kafka是一种高吞吐量的分布式发布订阅消息系统(消息引擎系统),它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览, 搜索和其他用户的行动)是在现代网络上的许多社…

14-22 剑和远方2 - 深度神经网络中的学习机制

概论 在第一部分中,我们深入探讨了人工智能的兴衰简史以及推动人工智能发展的努力。我们研究了一个简单的感知器,以了解其组件以及简单的 ANN 如何处理数据和权重层。在简单的 ANN 中,不会对数据执行特定操作。ANN 中的激活函数是一个线性函…

Surface splatting (2D Gaussian splatting)代码分析

源码地址 colab.research.google.com/drive/1qoclD7HJ3-o0O1R8cvV3PxLhoDCMsH8W 核心代码 surface_splatting def surface_splatting(means3D, scales, quats, colors, opacities, intrins, viewmat, projmat):# Rasterization setupprojmat torch.zeros(4,4).cuda()projm…

flask使用定时任务flask_apscheduler(APScheduler)

Flask-APScheduler描述: Flask-APScheduler 是一个 Flask 扩展,增加了对 APScheduler 的支持。 APScheduler 有三个内置的调度系统可供您使用: Cron 式调度(可选开始/结束时间) 基于间隔的执行(以偶数间隔运行作业…