目前 WebAssembly 已經開始在哪些場景中應用了?不妨從這 8 個 WebAssembly 應用一探究竟!
事實上,WebAssembly 最大的優點莫過于可大幅度提升 Javascript 的性能。
WebAssembly 的設計目标:定義一個可移植,體積緊湊,加載迅速的二進制格式為編譯目标,而此二進制格式檔案将可以在各種平台(包括移動裝置和物聯網裝置)上被編譯,然後發揮通用的硬體性能以原生應用的速度運作。
除了浏覽器開發者和遊戲開發者大力支援 WebAssembly 外,許多需要提升性能表現的大型網頁應用或線上工具,都可從 WebAssembly 的超快運作速度中受益。那麼目前 WebAssembly 已經開始應用在哪些場景了呢?我們不妨從下面 8 個 WebAssembly 應用一探究竟。其中,有些應用已在 GitHub 上提供源碼,可供我們參考,以打造自己的 WebAssembly 應用。
1. TeaVM — 将 JVM 位元組碼翻譯成 JavaScript 和 WebAssembly
TeaVM 是一個 AOT 編譯器(翻譯器),可将 JVM 位元組碼翻譯成 JavaScript 或 WebAssembly 格式,它和著名的 Google Web Tooklit(GWT) 有一定相似之處,但必須指出 TeaVM 并不需要 Java 源代碼,而隻需要 class 檔案(JVM 位元組碼)。是以它能成功地用于 Kotlin 和 Scala 等基于 JVM 的語言。
TeaVM 在首頁上的自我描述為,給不想學習 JavaScript 技術,但又想要進行 Web 前端開發的 Java 開發者的一個強大工具。是以,TeaVM 除了可以讓 Java 開發者進行前端開發工作外,也能整合舊的 Java 背景開發基礎架構。
GitHub 位址:https://github.com/konsoletyper/teavm
2. Figma — 基于浏覽器的多人實時協作 UI 設計工具
- https://www.figma.com/
Figma 稱得上是一款新晉的設計神器,它以浏覽器為基礎環境,是一個用于進行各種設計的多人實時協作工具,正因為它基于浏覽器,是以支援 Windows、macOS 以及 Linux 平台,并且有 iOS 端的預覽工具。
除了實時協作,Figma 還有版本控制、矢量網絡(Vector Network)、全平台适配等一些很棒的特性。此外,我們都知道 UI 設計工作必須要經常處理體積巨大的設計檔案,是以不難發現讀取速度以及性能對 Figma 的重要性。
過去的 Figma 使用 Asm.js 來加快檔案讀取速度,現在改用 WebAssembly 技術後,這套多功能 UI 設計工具的運作速度又再飙升 3 倍。
雖然這是一款收費産品,但提供了免費體驗版。傳送門:https://www.figma.com
附注:asm.js 由 Mozilla 提出,屬于 JavaScript 的一個子集,主要是為了解決 JavaScript 的執行效率問題,可以更大程度的優化以提高執行速度。
3. Google Earth — 支援各大浏覽器的 3D 地圖,而且運作流暢

2017年10月底,谷歌開始支援讓 Google Earth 在 Firefox 上運作,其中的關鍵就是使用了 WebAssembly。
在 WebAssembly 尚未問世時,能讓代碼在浏覽器原生執行的技術除了 Asm.js 外,還有谷歌自家的 Native Client。而在谷歌選擇後者之下,它也讓 Google Earth 隻能在 Chrome 浏覽器中運作。但随着主流浏覽器相繼支援 WebAssembly 的情況下,Google Earth 團隊也承諾,要開始從 Native Client 遷移到 WebAssembly。
Google Earth:https://www.google.com/earth/
4. Magnum — 跨平台的 OpenGL 圖形引擎
Magnum 是一款輕量級和子產品化的遊戲、資料可視化 OpenGL 圖形處理引擎,支援 C++11/C++14。桌面環境一共支援 Linux、Windows 及 Mac,移動環境也支援了 iOS 和 Android,并且整合了嵌入式 Linux,而在網頁環境則必須通過編譯器 Emscripten 将代碼編譯成 Asm.js、WebAssembly 格式。該工具所支援的圖檔 API,包含了 OpenGL、OpenGL ES 及 WebGL。
GitHub 位址:https://github.com/mosra/magnum
5. Egret Engine — 最受歡迎的 HTML 5 遊戲引擎,讓遊戲引擎快三倍
Egret Engine 是白鹭科技開發的知名遊戲引擎,它是遵循 HTML 5 标準的 2D、3D 引擎,解決了 HTML 5 性能問題及碎片化問題,靈活地滿足開發者開發 2D 或 3D 遊戲的需求,并有着極強的跨平台運作能力。
在2017年5月時,白鹭引擎宣布開始支援 WebAssembly,而利用 WebAssembly,白鹭引擎可以将 HTML 5 代碼編譯為機器碼運作,讓遊戲運作性能提升 300%。若使用者浏覽器不支援 WebAssembly,該引擎也會自動轉換成 Java 版本。中國熱門手遊,如:莽荒紀同名手遊、三生三世十裡桃花同名手遊、貓來了、夢道、坦克風雲等都采用了 Egret Engine。
GitHub 位址:https://github.com/egret-labs/egret-core/
6. Blazor — 讓 .NET 代碼也能在浏覽器運作
通過 WebAssembly 或 Asm.js 将 Mono Runtime 編譯處理後,開源 UI 架構 Blazor 可以讓 .NET 代碼在浏覽器環境中運作,而習慣 ASP.NET Razor 文法的開發者,仍可以繼續沿用習慣的開發模式。
Razor 會自動檢測開發者的浏覽器是否支援 WebAssembly,如果不支援,該工具也會自動轉換成 Asm.js。不過目前該工具仍然屬于實驗階段,尚未支援正式環境的建構、調試功能。
GitHub 位址:https://github.com/SteveSanderson/Blazor
7. Web-DSP — 使用浏覽器就能即時制作多媒體影音特效
Web-DSP 是一個在浏覽器上運作的多媒體影音處理函數庫,其目标是打造各類基本元件,讓開發者可以在浏覽器上處理影音等多媒體檔案。而該工具的函數庫是以 C++ 編寫的,并且編譯成 WebAssembly 執行,借此讓 JavaScript 開發者也能使用。
該工具開發者也展示了使用 WebAssembly 的圖像編輯器,在播放視訊的同時,使用者也可以即時選擇套用各項效果,如負片、灰階、噪點、銳化等處理。
GitHub 位址:https://github.com/shamadee/web-dsp
8. Walt — 用 JavaScript 文法也能快速開發原生的極速應用
目前,在多數網頁開發者尚未熟悉使用 Asm.js,WebAssembly 技術的情況下,有一款叫做 Walt 的工具或許可以幫助到他們,目的是讓網頁開發者可以不用接觸 C、C++ 或者 Rust 語言,繼續使用 JavaScript 文法,來打造出接近機器碼效率的網頁應用。此外 Walt 也不需要依靠 LLVM 編譯器或者其他二進制轉換工具,可以直接将源代碼編譯成 WebAssembly 格式。
GitHub 位址:https://github.com/ballercat/walt
作者:
程式師視野本文來源:
techug如需轉載請聯系原作者