別了,JavaScript;你好,WebAssembly
作為JavaScript替代,一種Web開發的新形式已經浮出水面:WebAssembly.
Web開發與JavaScript開發向來是同義詞。就是說,直到現在。但一種新的Web開發形式已然出現,聲言會取代JavaScript。作為一個擁有15年Web開發經驗的程式員,這個新方向瞬間吸引了我。
ofollow,noindex" target="_blank">WebAssembly (Wasm)是一種在瀏覽器中可以執行的二進位制指令,旨在為C#等高階語言提供一種編譯目標。去年,微軟開始嘗試基於WebAssembly 使用Mono執行時讓.NET進入瀏覽器 。Mono為.NET執行庫(.dll)提供了基於WebAssembly執行的環境。執行在Mono之上的是 Blazor ,一個構建於.NET的單頁Web應用開發框架,通過Mono的WebAssembly執行時在瀏覽器中執行。WebAssembly-Mono-Blazor這個全棧.NET應用平臺能夠催生不用JavaScript或瀏覽器外掛的開發者。
這個新東東的出現立即引發了問題,很正常。
什麼是WebAssembly能而JavaScript或TypeScript不能提供的?
我的答案完全代表自己的想法,而且我覺得並非所有開發者、專案或工具都應該一樣。對我而言,答案很清楚,簡單說就是“選擇”。不限於JavaScript的Web開發意味著選擇,或者說可以選擇不使用JavaScript或.NET而選擇其他語言的自由。更準確也更個人地說,我有了可以使用自己早就在使用的工具和語言開發Web應用的選擇。
npm與WebPack
.NET切入Web開發的一個特殊優勢,就是有了可以替換npm和WebPack的工具。作為一個多年的.NET程式設計師,我可以向NuGet(包管理程式)和MSBuild招手了。對我而言,這些工具問題少,更熟悉,且效率也高得多。儘管沒有完美的事物,但我使用NuGet和MSBuild的體驗一直是很好的。
乍一聽好像我的意思是npm和Webpack不好,希望大家放棄它們,但反之也一樣。npm和WebPack都是偉大的工具,還會存在相當長的時間。如果你的JavaScript工具用來建立Web應用很好使,那沒問題。基於我對Web開發多年的認知,我明白為什麼會出現npm和WebPack,也對它們取得的成熟和將要做出的貢獻表示讚賞。
降低學習難度
Blazor讓我非常震撼的是它使用起來非常簡單。公正地說,我承認它的功能不完善,還沒有大規模測試。Blazor把簡單易用的Razor(UI)與其他.NET核心概念組合起來:依賴注入、配置、路由。而且從Angular及React等流行JavaScript框架借用了最佳模式,同時利用了Razor模板,並提供了與其他.NET慣例的一致性。這些功能的組合支援前所未有的技能重用。相信使用同一種語言並熟悉全棧JavaScript應用相關概念的Node程式設計師可以理解這一點。
還是需要JavaScript
使用WebAssembly並不意味著可以拋棄JavaScript。WebAssembly眼下還只能被JavaScript載入和編譯。(沒錯,這有點亂。)雖然未來的計劃讓WebAssembly模組可以像ES6模組一樣被瀏覽器載入,但JavaScript還是啟動WebAssembly必需的。JavaScript的必要性還不止於此。WebAssembly自身無法訪問任何平臺API,而要訪問這些API,JavaScript也是必要的。
Blazor interop
WebAssembly應用可以呼叫JavaScript,讓WebAssembly能呼叫自己不能呼叫的API。這項功能Blazor框架也用到了。因為Blazor剛出來不久且還是實驗性的,開發者可以通過 Blazor interop 在WebAssembly自身不足時把JavaScript作為後備,當然Blazor也不成熟。此外這個互動機制也是一個抽象層,很多使用C#的程式設計師都會用到,他們不必擔心底層執行的還是JavaScript。隨著WebAssembly的不斷成熟,類似的抽象會不斷減少。
不是永遠不見
Progress在JavaScript及 Angular、React、Vue和jQuery 上投入巨大。Progress旗下最令人激動的一個開源框架是 NativeScript .。NativeScript是一個使用JavaScript建立iOS和Anroid原生應用的框架。NativeScript提醒我WebAssembly是在為程式設計師建立新選擇。藉助 NativeScript,JavaScript程式設計師可以重用自己已有的技能進入移動開發領域,這在工作上更有價值。NativeScript的目標是為程式設計師賦能,也不減損Swift、Objective-C或Java的價值。
我感覺WebAssembly也有一個相同的目標。事實上,這個目標官宣在 WebAssembly文件中 。
WebAssembly想取代JavaScript?不!WebAssembly的設計目標是作為JavaScript的補充,而不是替代。雖然WebAssembly會隨著時間推移允許很多語言在Web上編譯執行,JavaScript依舊有著巨大的能量,還會繼續保持其單一、 專有(如前所述)的動態Web語言地位。此外,未來的JavaScript和WebAssembly應該只需配置幾下就可以協同工作……
前進
是不是使用JavaScript的替代器開發讓你激動,WebAssembly及ASP.NET Core的Blazor等框架就值得投入 一些 時間 了呢?目前還是WebAssembly及其相關技術的早期階段,但前承諾的廣闊生態系統引起了我的注意。作為Web開發的擁躉,我希望它發展壯大,拓寬應用的寫作思路。至少我學了那麼多年.NET,現在終於可以用它來更快地做Web開發了,還是很值得炫耀的。不僅如此,我其實也很熟悉JavaScript,而且還在不斷學習。作為一個工程師,擁有這些技能就有了解決問題的思路。
WebAssembly讓你覺得震撼嗎?想不想試試Blazor?還是說你有Ruby或 Python背景,希望在自己的能力範圍內使用WebAssembly?請留言。
如果你有興趣學習更多我們基於.NET和JavaScript的UI工具,一定要關注我們的線上釋出會,這個線上活動會討論 Telerik (on 10/2)和 Kendo UI 相關的所有新特性。 (明天,9/27。)
web development , .NET , webassembly , blazor , JavaScript