![](https://s4.itho.me/sites/default/files/styles/picture_size_large/public/field/image/wasmer-js-sdk.jpg?itok=CIe8WMmQ)
專注發展WebAssembly技術與工具的公司Wasmer,推出一個稱為Wasmer JS SDK的JavaScript函式庫,供開發者可在瀏覽器中執行各種WASI和WASIX套件。Wasmer JS SDK的特色在於,能夠支援多執行緒、訊號(Signal)、子程序(Subprocess)功能,並執行諸如Python、Bash、FFmpeg等UNIX程式。
WebAssembly原本是專為網頁應用設計的低階程式語言,其運作效能接近機器碼,可以被快速載入和執行,對於遊戲、影片編輯和模擬運算等需要大量計算資源的應用特別有用,且於WebAssembly程式在沙盒環境中運作,可確保用戶免受惡意程式碼的影響。
雖然WebAssembly起初是針對瀏覽器環境設計,這也使得其在瀏覽器外的應用場景遇到一些限制。當考慮將WebAssembly應用於伺服器端和其他非瀏覽器環境時,便出現對更廣泛系統互通性的需求,例如檔案系統存取和網路通訊等功能。為了解決這些限制,WebAssembly開發團隊也就著手制定了WASI(WebAssembly System Interface)。
WASI目標是建立一個標準化系統介面,以方便WebAssembly模組可以在不同的環境中,以一致且安全的方式與作業系統進行互動。WASI基於WebAssembly的安全和可移植性原則,並且在原有的基礎上增加許多系統級功能,透過WASI使得WebAssembly的應用場景,從原本的瀏覽器環境擴展到了伺服器端、雲端運算、物聯網裝置等更廣泛的領域。
Wasmer在今年6月的時候,推出WASI與可移植作業系統介面(Portable Operating System Interface,POSIX)的超集合 WASIX。由於WASI並不支援所有POSIX,所以Wasmer希望透過推出WASIX,強化現有WASI ABI(Application Binary Interface),並增加額外非侵入式的系統呼叫擴充。簡單來說,WASI僅提供基本的系統操作,而WASIX可視為WASI的擴充,提供更廣泛的系統呼叫和功能,WASIX並非要取代WASI,而是要作為一個相容的WASI擴充解決方案。
而現在Wasmer推出JS SDK,是要回頭解決WebAssembly在瀏覽器中所遇到的限制和挑戰,提供更多方便功能。WebAssembly在瀏覽器中並不支援像是檔案系統存取和網路通訊等系統級功能,而Wasmer JS SDK則透過支援WASI和WASIX擴充,讓WebAssembly也可以在瀏覽器執行複雜的操作。
Wasmer JS SDK簡化瀏覽器中部署和執行WebAssembly模組的過程,提供一套易於使用的API,讓開發者可以快速載入和執行模組,不需要開發者進行繁瑣的手動配置。而且Wasmer JS SDK還提供經過最佳化的WebAssembly執行環境,提高模組的執行效能和資源管理。
雖然JavaScript本身是單執行緒運作,但是透過JS Workers,Wasmer JS SDK能夠在瀏覽器中啟用類似多執行緒的功能。官方解釋,JS Workers API與典型的執行緒API不同,因為沒有執行緒的Join同步處理方法,JS Workers是透過訊息通道和主執行緒溝通。因此JS Workers得以重用主WebAssembly程序中的共享記憶體,並在更改時通知記憶體,進而允許類UNIX執行緒透過JS Workers運作。
此外,在傳統類UNIX系統中,fork()是一個用於創建子程序的系統呼叫,但要在瀏覽器中執行fork(),是一個非常具有挑戰的工作,因為瀏覽器通常不提供這種底層系統存取能力,要執行fork()就需要轉儲堆疊並在不同的程序中恢復堆疊。而Wasmer JS SDK使用asyncify將程式凍結在堆疊中,在新建立的Worker中還原。
Wasmer API採用特殊的容器格式,可以同時供應WebAssembly資源和檔案系統資源,這代表程式可以一次下載所有檔案系統相依套件。Wasmer JS SDK還內建檔案系統API,進而實現更豐富的功能。
借助Wasmer JS SDK,開發者可以在瀏覽器中執行多媒體處理工具FFmpeg,執行影片和音訊檔案編輯工作,而且瀏覽器中也可以運作CPython,因此開發者可以在網頁應用中直接執行Python腳本。甚至開發者還可以在瀏覽器中執行Bash Shell,這將可在網頁應用程式帶來強大的命令列操作功能。
熱門新聞
2024-08-28
2024-08-26
2024-08-30
2024-08-26
2024-08-27
2024-08-24