成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

什么是WebAssembly?

譯文 精選
開發 前端
本文針對一種小型且快速的二進制編程語言—WebAssembly,先后介紹了其工作原理、實際用例、以及正在完善的各項功能。

?譯者 | 陳峻

審校 | 孫淑娟

二十多年來,有一種編程語言一直在Web瀏覽器中以原生的方式被使用至今。這便是JavaScript。期間,我們見證了諸如Java和Flash的ActionScript等第三方二進制插件,從興起到逐漸消亡。而作為另一類Web語言的CoffeeScript,最終仍然會被編譯成JavaScript。可見,只有JavaScript才是Web開發界的王者,并骨灰級地被沿用著。

不過,我們現在有了一種新的可選項:WebAssembly(簡稱為Wasm)。作為一種小型且快速的二進制格式編程語言,它可以為Web應用提供接近原生的性能。此外,WebAssembly旨在成為任何語言的編譯目標,而JavaScript只是目標中的一種。也就是說,鑒于每一種主流瀏覽器都能支持WebAssembly,我們有必要開始認真地考慮,如何編寫出各種可以被編譯為WebAssembly的客戶端應用。

值得注意的是,WebAssembly應用程序并不打算(至少目前并沒有)取代JavaScript應用程序。相反,鑒于JavaScript具有靈活、動態類型、以及源代碼可讀等交付特性,WebAssembly旨在提供高速、強類型,以及緊湊二進制式的交付特性。因此,WebAssembly可以被視為JavaScript的輔助“伙伴”。

在實際中,開發人員可以考慮將WebAssembly運用到諸如:游戲、音樂流、視頻編輯、以及CAD應用等性能敏感型的用例中。目前,許多Web服務已經開始采用WebAssembly了。例如,為了縮短加載的時間與執行的速度,谷歌地球和協作式繪圖與圖表應用Figma,都采用了較新的WebAssembly。

1.WebAssemzbly的工作原理 

由W3C開發的WebAssembly,用其創建者的話來說是一個“編譯的目標”。開發人員不必直接編寫WebAssembly。他們可以選用自己熟悉的語言編寫代碼,然后編譯成WebAssembly類型的字節碼。字節碼通常運行在客戶端的Web瀏覽器中,并被翻譯成可被高速執行的原生機器代碼。

WebAssembly代碼旨在實現比JavaScript更快的加載、解析和執行。當使用WebAssembly時,Web瀏覽器仍然存在下載Wasm模塊,以及予以設置的開銷。雖然對于較大的Wasm項目而言,此類模塊會因為在運行過程中產生了幾兆字節,而出現延遲。但是在其他同等條件的中小型項目中,WebAssembly會運行得更快一些。

同時,WebAssembly也提供了一個沙盒執行模型,該模型與JavaScript的現有安全模型非常相似。也就是說,Wasm應用程序無法直接訪問到沙箱之外的任何內容,甚至是它們正在運行的網頁上的DOM。因此,如果應用程序需要與系統中的其他部分進行交互,就必須使用類似WebAssembly系統接口(WASI,https://wasi.dev/)的各種ABI(應用程序二進制接口)。WASI為程序提供了常被用于文件、網絡、系統時鐘、以及其他系統服務的受控式訪問。

目前,雖然在Web瀏覽器中運行WebAssembly,是其最常見的一種使用場景,但是WebAssembly遠不僅僅是基于Web的解決方案。例如:Wasmer項目就可以在服務器端運行WebAssembly應用程序。這與Node.js運行時(runtime)在瀏覽器之外運行JavaScript的方式非常類似。

2.用例 

WebAssembly的最基本用例就是被開發者用來編寫瀏覽器內的軟件。我們可以用各種語言來編寫出可以被編譯成WebAssembly的組件,然后通過JavaScript,將WebAssembly的最終、有效負載傳遞給客戶端。

如前文所述,WebAssembly在設計時就考慮到了各種性能密集型、基于瀏覽器的用例。其中包括:游戲、音樂流、視頻編輯、CAD、加密、以及圖像識別等等。總的說來,WebAssembly用例通常適合如下三個領域:

  • 已存在于目標語言中的高性能代碼。例如,如果你有一個已用C語言編寫的高效數學函數,并且需要將它合并到某個Web應用程序中,那么,你就可以將它部署為一個WebAssembly模塊。同時,您可將該應用中,那些對于性能不太敏感的、面向用戶的部分,保留為JavaScript。
  • JavaScript代碼不夠理想,需要從頭開始編寫的高性能代碼。過去,開發人員會使用asm.js(http://asmjs.org/)來改寫此類代碼。如今,您可以通過WebAssembly來實現該目的。
  • 將桌面應用移植到Web環境中。雖然asm.js和WebAssembly都可以在技術上實現此類需求,但是WebAssembly可以提供比使用HTML呈現GUI更為基礎的應用。對此,您可以查看WebDSP和瀏覽器中的Windows 2000這兩個示例,來進一步了解其功效。

總之,WebAssembly開發往往能夠達到比現有JavaScript應用程序更快的運行效果。

3.WebAssembly的語言支持 

顧名思義,WebAssembly不可被直接編寫,它更像是一種匯編語言,一種供機器使用、而非高級的、用戶友好的編程語言。與C或Java相比,WebAssembly更接近由LLVM語言編譯器的基礎結構所生成的中間代碼表示(intermediate representation,IR)。

通常,大多數使用WebAssembly的場景都會涉及到使用如下三種基本方式中的一種,把那些由高級語言編寫的代碼,轉換為WebAssembly:

  • 直接編譯。通過本語言自帶的編譯器工具鏈,源代碼可以被直接翻譯成WebAssembly。例如:Rust、C/C++、Kotlin/Native、以及D都可以通過原生方式,從支持此類語言的編譯器處,直接編譯出Wasm。
  • 第三方工具。Java、Lua和.Net等語言雖然并不提供原生的、支持Wasm的工具鏈,但它們可以使用第三方實用程序,將代碼轉換為Wasm。
  • 基于WebAssembly的解釋器。它并非是將現有語言的代碼翻譯成WebAssembly,而是用由WebAssembly編寫的語言解釋器,去運行代碼。由于解釋器本身就占有幾兆字節的代碼空間,因此,該方法較為臃腫。當然,它保留了那些原有語言編寫的代碼,在無需轉換的情況下,被運行起來。例如,Python(往往是通過PyScript)和Ruby都擁有翻譯成Wasm的解釋器。

4.WebAssembly即將推出的功能 

不可否認,WebAssembly仍處于早期階段。其工具鏈和實現,更接近于概念性的驗證(proof-of-concept)。目前,WebAssembly正努力通過如下方面的舉措,讓其更加實用:

垃圾回收的原語(Primitives)

WebAssembly目前并不直接支持那些使用垃圾回收內存模型(garbage-collected memory model)的語言。我們只能通過限制功能集,或將整個運行時(runtime)嵌入WebAssembly的可執行文件,以支持Lua或Python等語言。當然,WebAssembly正在緊鑼密鼓地研發其支持垃圾回收內存模型的功能。

線程(Threading)

對線程的原生支持,在Rust和C++等語言中十分常見。而WebAssembly缺乏對于線程的支持,就意味著那些以WebAssembly為最終目標的應用代碼的整個類,我們都不能使用Rust和C++等語言來編寫。目前,已有人提出使用C++線程模型,向WebAssembly添加線程。

大容量內存操作和SIMD

大容量內存操作和SIMD(單指令與多數據,single instruction, multiple data)的并行性,對于需要處理大量數據、并需要通過原生CPU加速,來防止阻塞的應用程序(如機器學習或數據科學應用)而言,是必不可少的。目前,WebAssembly正努力添加此類功能。

高級語言結構

同時,WebAssembly正在對標高級語言結構,并不斷完善如下功能:

  • 異常(Exceptions)可以在WebAssembly中被模擬,但是不能通過WebAssembly的指令集被原生地實現。目前,WebAssembly正計劃創建與C++異常模型相兼容的異常原語,以便被編譯為WebAssembly的那些語言代碼所使用。
  • 參考類型(Reference types)可以輕松地向主機環境傳遞被用作參考的對象。它能夠使得垃圾回收和其他高級功能,更容易地在WebAssembly中實現。
  • 尾調用(Tail calls)是一種在多種語言中被用到的設計模式。
  • 能返回多個值的函數,如Python或C#中的元組(tuples,或稱數組)。
  • 符號擴展運算符(Sign-extension operators),一種實用的低級數學運算。LLVM能夠支持它。

調試和分析工具

如您所知,被轉譯的JavaScript存在著一個巨大問題:由于無法在轉譯代碼和源代碼之間建立關聯,因此我們難以進行調試和分析。目前,WebAssembly正努力通過源地圖支持的方式,來解決此類問題。

原文鏈接:https://dzone.com/articles/what-is-webassembly

譯者介紹

陳峻 (Julian Chen),51CTO社區編輯,具有十多年的IT項目實施經驗,善于對內外部資源與風險實施管控,專注傳播網絡與信息安全知識與經驗;持續以博文、專題和譯文等形式,分享前沿技術與新知;經常以線上、線下等方式,開展信息安全類培訓與授課。?

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2023-06-13 23:21:35

2017-03-23 14:37:19

WebAssemblyasm.js編程

2023-02-26 00:17:45

2023-05-05 17:20:04

2017-03-19 22:13:10

WebAssemblyJavaScript編程

2023-01-31 09:02:24

JSVMVR

2022-06-02 08:01:11

云原生工具

2022-10-28 16:57:18

DockerWasm

2023-12-10 16:48:00

Wasm瀏覽器

2021-03-20 22:46:22

IaaSSaaSPaaS

2017-03-19 20:41:57

WebAssemblyJavaScript編程

2017-03-19 22:43:12

WebAssemblyJavaScript編程

2022-05-28 12:33:17

谷歌項目經理領導者

2023-09-01 13:49:00

內存進程線程

2020-07-14 14:59:00

控制反轉依賴注入容器

2023-03-27 13:25:18

WebAssembl語言Scheme

2021-06-11 09:00:00

語言WebWebAssembly

2017-12-19 21:29:58

物聯網區塊鏈大數據

2023-12-12 07:30:54

IstioWasm前端

2022-05-16 10:25:03

Web內部垃圾收集安全性
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美视频免费在线 | 国产精品高清在线 | 一区二区三区免费 | 久热久 | 午夜天堂精品久久久久 | 精品欧美一区二区精品久久久 | 国产欧美二区 | 韩国毛片一区二区三区 | 久久久免费观看视频 | 国产在线观看不卡一区二区三区 | 99色综合 | 欧美一区| 精品久久久一区 | 在线国产中文字幕 | h片在线播放| 精品欧美乱码久久久久久1区2区 | 精品一区二区久久久久久久网站 | 99精品一区二区三区 | av网站在线看 | 99精品国产一区二区青青牛奶 | 日本淫视频 | 91色站| 中日av| 亚洲成人综合社区 | 亚洲精品视频在线看 | 国产视频一视频二 | 在线中文视频 | 国产一区二区三区色淫影院 | 亚洲成人午夜电影 | 91人人澡人人爽 | 久久久人成影片免费观看 | 国产精品久久久久久吹潮 | 亚洲精品68久久久一区 | 综合在线视频 | 欧美精品久久 | 亚洲电影一区 | 91精品国产91久久综合桃花 | 亚洲一区久久 | 免费看大片bbbb欧美 | 97视频在线观看网站 | 蜜桃av人人夜夜澡人人爽 |