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.pswp.cn/web/41363.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41363.shtml
英文地址,請注明出處:http://en.pswp.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 式調度(可選開始/結束時間) 基于間隔的執行(以偶數間隔運行作業…