自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

WebAssembly終極指南

譯文 精選
開(kāi)發(fā) 前端
Wasm 的主要優(yōu)點(diǎn)之一是它的功能使其能夠適應(yīng)除 JavaScript 之外的多種不同語(yǔ)言,當(dāng)然包括 Python、Rust 以及 Go、.NET、C++、Java 和 PHP。

51CTO讀者成長(zhǎng)計(jì)劃社群招募,咨詢小助手(微信號(hào):CTOjishuzhan)

WebAssembly(又名Wasm)已被證明在瀏覽器中運(yùn)行得非常好。它被廣泛用作提高速度和安全性的一種方式,尤其是直接在瀏覽器中運(yùn)行的應(yīng)用程序的計(jì)算簡(jiǎn)單性,特別是使用 JavaScript 以及其他語(yǔ)言。這種速度和簡(jiǎn)單性最終要?dú)w功于它的二進(jìn)制計(jì)算結(jié)構(gòu),它直接以非常干凈的方式在 CPU 上運(yùn)行。

然而,WebAssembly 最終將被廣泛使用的場(chǎng)景,可能是作為一種在單個(gè)模塊中跨不同容器和 Kubernetes 集群、設(shè)備(例如邊緣和物聯(lián)網(wǎng)設(shè)備)和多云環(huán)境同時(shí)部署應(yīng)用程序的方式。

WebAssembly 可以說(shuō)初露崢嶸,不負(fù)眾望。盡管它是還有待觀察,但它最終能否成功在很大程度上取決于其作為一項(xiàng)技術(shù)的價(jià)值之外的因素??赡茏璧K它的因素包括缺乏關(guān)于部署它的標(biāo)準(zhǔn)化設(shè)備的協(xié)議。

1、關(guān)鍵賣(mài)點(diǎn)

考慮到其低計(jì)算指令集大小,WebAssembly 提供的其他東西是它的超快速度和它的安全性——或者它的沙箱設(shè)計(jì)使用行業(yè)術(shù)語(yǔ)——因?yàn)樵诓渴鹌陂g其他服務(wù)或應(yīng)用程序無(wú)法訪問(wèn),因?yàn)閮?nèi)部代碼仍然存在隔離并且在以毫秒為單位的閃電般快速旅程中無(wú)法訪問(wèn),以部署在不同的環(huán)境中。

WebAssembly 非常適合無(wú)服務(wù)器環(huán)境,被視為克服許多阻礙其采用的無(wú)服務(wù)器問(wèn)題的一種方式。今天典型的第三方用例意味著無(wú)服務(wù)器將需要第三方的支持,而第三方通常是云供應(yīng)商。對(duì)于許多人來(lái)說(shuō),無(wú)服務(wù)器架構(gòu)可能等同于Amazon Web Services上的 Lambda 或來(lái)自其他云供應(yīng)商(例如 Azure、Google Cloud、 Oracle或 IBM)的產(chǎn)品。因此,在許多情況下,組織必須樂(lè)于將其多個(gè)基礎(chǔ)架構(gòu)委托給一個(gè)第三方云提供商,而不是多個(gè)供應(yīng)商來(lái)管理其關(guān)鍵應(yīng)用程序。僅出于這個(gè)原因,避免供應(yīng)商鎖定是 Wasm 的一個(gè)關(guān)鍵賣(mài)點(diǎn)。

Fermyon Technologies 聯(lián)合創(chuàng)始人兼首席執(zhí)行官 Matt Butcher 表示:“我們?cè)?Fermyon 一直聽(tīng)到的一件事是,開(kāi)發(fā)人員喜歡無(wú)服務(wù)器函數(shù)范式。” “不過(guò),這句話幾乎總是伴隨著‘但是’:雖然每個(gè)大云都提供無(wú)服務(wù)器,但開(kāi)發(fā)人員不喜歡這些產(chǎn)品附帶的供應(yīng)商鎖定、性能和開(kāi)發(fā)人員體驗(yàn)?!?/p>

Wasm 的一個(gè)基本特征是它如何讓開(kāi)發(fā)人員不再擔(dān)心使用大量潛在的庫(kù)來(lái)讓他們的代碼看到部署?!盁o(wú)論底層語(yǔ)言如何,WebAssembly 都提供了共享庫(kù)的承諾。例如,一個(gè) JavaScript 程序可以加載一個(gè)最初用 Python 編寫(xiě)的庫(kù)和另一個(gè)用 Rust 編寫(xiě)的庫(kù),并同時(shí)使用它們,”Butcher 說(shuō)。“在當(dāng)今的語(yǔ)言生態(tài)系統(tǒng)中,每種編程語(yǔ)言都有自己的YAML解析器、自己的 JPEG 庫(kù)等等。用多種語(yǔ)言實(shí)現(xiàn)相同的算法會(huì)浪費(fèi)多少小時(shí)、幾天和幾個(gè)月?WebAssembly 是補(bǔ)救措施?!?/p>

2、有望成為新標(biāo)準(zhǔn)

事實(shí)上,WebAssembly 有潛力成為編寫(xiě)應(yīng)用程序的新標(biāo)準(zhǔn),它由可以組合并塑造成許多不同應(yīng)用程序的“真正通用的構(gòu)建塊”組成,Enterprise Management Associates (EMA) 的分析師 Torsten Volk, 說(shuō)。對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),這是“無(wú)需擔(dān)心讓它在這些應(yīng)用程序的運(yùn)行時(shí)內(nèi)運(yùn)行的”完成的。這為開(kāi)發(fā)人員生產(chǎn)力的大幅提升打開(kāi)了大門(mén),因?yàn)殚_(kāi)發(fā)人員可以從甚至可以作為運(yùn)行時(shí)的一部分提供的樣板模塊庫(kù)中進(jìn)行選擇”Volk 說(shuō)?!八鼈兛梢园糜谏矸莨芾?、訪問(wèn)控制、應(yīng)用程序消息傳遞、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)挖掘的微服務(wù),也可以是整個(gè)數(shù)據(jù)管道、機(jī)器學(xué)習(xí)模型或 API 集成。開(kāi)發(fā)人員將專(zhuān)注于編寫(xiě)業(yè)務(wù)代碼,并且只編寫(xiě)業(yè)務(wù)代碼,這種前景讓 Wasm 如此令人興奮。”

然而,就目前而言,WebAssembly 仍然是一項(xiàng)正在進(jìn)行的工作。除其他外,它正在等待組件接口 Wasi 的標(biāo)準(zhǔn)化,該層需要確保部署 Wasm 應(yīng)用程序的不同設(shè)備和服務(wù)器之間的端點(diǎn)兼容性。

3、到底做了什么?

這個(gè)想法是,WebAssembly 旨在部署以開(kāi)發(fā)人員選擇的語(yǔ)言編寫(xiě)的應(yīng)用程序,以便在不同的環(huán)境中同時(shí)部署到任何地方。“完全不同”,因?yàn)?WebAssembly 在 CPU 上運(yùn)行,只需要一個(gè)設(shè)備、服務(wù)器等,就能運(yùn)行一個(gè) CPU 指令集。這意味著 WebAssembly 模塊中應(yīng)用程序的單一部署理論上應(yīng)該能夠在多種不同的不同設(shè)備上運(yùn)行和更新,無(wú)論是服務(wù)器、邊緣設(shè)備、多云、無(wú)服務(wù)器環(huán)境等。

在任何有 CPU 能夠運(yùn)行指令集的地方,WebAssembly 旨在運(yùn)行以越來(lái)越多的語(yǔ)言編寫(xiě)的應(yīng)用程序,它可以托管在一個(gè)模塊中。它現(xiàn)在支持 Python、JavaScript、C++、Rust 等。用不同編程語(yǔ)言編寫(xiě)的不同應(yīng)用程序應(yīng)該能夠在單個(gè)模塊中運(yùn)行,盡管這種功能在很大程度上仍處于開(kāi)發(fā)階段。從本質(zhì)上講,一個(gè)微服務(wù)模塊應(yīng)該能夠用于在多個(gè)不同的環(huán)境中部署多個(gè)服務(wù),并在不重新配置端點(diǎn)的情況下提供應(yīng)用程序更新。理論上,只需在模塊中配置應(yīng)用程序即可,一旦模塊內(nèi)部完成工作,就不必為部署模塊的每個(gè)環(huán)境單獨(dú)重新配置。

4、能取代容器嗎?

WebAssembly 將取代容器和 Kubernetes 的論點(diǎn)在很大程度上是不合邏輯的。這是因?yàn)?WebAssembly 和容器以及 Kubernetes 是不同但重要的技術(shù)。即使有一些重疊的目的,它們也滿足特定和獨(dú)立的計(jì)算需求。

至少在不久的將來(lái),許多組織將不愿意更換他們的容器基礎(chǔ)設(shè)施和 Kubernetes 環(huán)境。除了可能會(huì)因?yàn)橛?WebAssembly 替換它們而失去對(duì)它們的投資之外,WebAssembly 并不是一種適用于所有容器化環(huán)境的全部替換技術(shù)。事實(shí)上,最近人們非常關(guān)注使用 Wasm 在容器和 Kubernetes 環(huán)境中部署應(yīng)用程序。

Docker 繼續(xù)發(fā)布關(guān)于它將如何容納和擴(kuò)展對(duì) WebAssembly 的支持的公告。經(jīng)常討論兩者將如何協(xié)同工作,尤其是如何將 Docker 與容器一起使用以允許它們使用 WebAssembly 部署和管理應(yīng)用程序。這些調(diào)整在很大程度上被認(rèn)為是為 Wasm 的采用和與容器和 Kubernetes 一起使用鋪平道路所必需的。

“憑借超音速啟動(dòng)速度和輕型運(yùn)行時(shí)要求,Wasm 非常適合無(wú)服務(wù)器功能——這在歷史上很難在 Docker 中很好地實(shí)現(xiàn)。相反,Docker 的突出特點(diǎn)是它能夠以可移植的方式輕松捆綁長(zhǎng)期運(yùn)行的服務(wù)器及其環(huán)境,”Butcher 說(shuō)?!伴L(zhǎng)期運(yùn)行的服務(wù)器還不是 Wasm 的強(qiáng)項(xiàng)?,F(xiàn)在 Wasm 可以以與容器相同的圖像格式打包,我們將看到這兩種技術(shù)結(jié)合起來(lái)構(gòu)建那種使用現(xiàn)有技術(shù)難以實(shí)現(xiàn)的混合無(wú)服務(wù)器和服務(wù)器微服務(wù)應(yīng)用程序。”

5、比 JavaScript 快嗎?

在廣為人知的萬(wàn)維網(wǎng)誕生之初,出現(xiàn)了 JavaScript。自 1995 年Brendan Eich創(chuàng)建了支持 Netscape 的語(yǔ)言以來(lái),JavaScript 就已經(jīng)存在了,Netscape 是一種在當(dāng)時(shí)具有革命性意義的網(wǎng)頁(yè)瀏覽器,現(xiàn)在已不復(fù)存在但在美學(xué)上令人愉悅。從那時(shí)起,ECMAScript 標(biāo)準(zhǔn)就成為了 Web 開(kāi)發(fā)的基礎(chǔ),代表了在 Web 瀏覽器中運(yùn)行的絕大多數(shù)應(yīng)用程序。

最近,WebAssembly——實(shí)際上已經(jīng)存在了一段時(shí)間——出現(xiàn)了。繼 2019 年萬(wàn)維網(wǎng)聯(lián)盟(W3C)將其命名為網(wǎng)絡(luò)標(biāo)準(zhǔn)后,它也因此成為繼 HTML、CSS、JavaScript 之后的第四個(gè)網(wǎng)絡(luò)標(biāo)準(zhǔn)。但是,雖然Web 瀏覽器應(yīng)用程序 代表了 Wasm 的中心和歷史用例,但重點(diǎn)是它被設(shè)計(jì)為可以在正確配置的 CPU 上的任何地方運(yùn)行——這就是 Wasm 和 JavaScript 在某些用例中分叉并變得更加集成的地方。

Wasm 和 JavaScript 保持緊密聯(lián)系,但 Wasm 除了 JavaScript 之外還有其他很多東西。簡(jiǎn)而言之,Wasm 幫助 JavaScript 在網(wǎng)絡(luò)瀏覽器中更高效地運(yùn)行的最初目的仍然是它們集成的關(guān)鍵組成部分。這種集成現(xiàn)在已經(jīng)超越了 Web 瀏覽器,并擴(kuò)展到邊緣和服務(wù)器應(yīng)用程序,而 JavaScript 本身并不是最適合的應(yīng)用程序。

這是由于 Wasm 如何在 CPU 級(jí)別以二進(jìn)制格式運(yùn)行。別忘了,與 JavaScript 不同,Wasm 不是一種編程語(yǔ)言。Wasm 的主要優(yōu)點(diǎn)之一是它的功能使其能夠適應(yīng)除 JavaScript 之外的多種不同語(yǔ)言,當(dāng)然包括 Python、Rust以及 Go、.NET、C++、Java 和 PHP。

所以,WebAssembly 既可以在需要的時(shí)候集成 JavaScript,當(dāng)然也不限于集成 JavaScript。這種與 JavaScript 的集成和使用一直是 WebAssembly 和 JavaScript 共生的基石,尤其是在 Web 應(yīng)用程序領(lǐng)域。

對(duì)于純計(jì)算性能以及圖像處理等任務(wù),WebAssembly 無(wú)疑顯示了其比 JavaScript 快得多的優(yōu)點(diǎn)。但可以說(shuō),上下文要比這復(fù)雜得多。關(guān)于更快的計(jì)算時(shí)間是否同樣重要,這并不是一個(gè)真正的問(wèn)題,例如移動(dòng)和 Web 應(yīng)用程序的輕型編碼任務(wù)需要 JavaScript 代碼。

JavaScript 是一種幾乎任何人都可以使用的語(yǔ)言,它提供了許多社區(qū)支持的庫(kù),這些庫(kù)支持許多用例,而無(wú)需每次都重新發(fā)明輪子,Volk 指出?!皩?JavaScript 和 Python 等依賴于解釋器的語(yǔ)言作為字節(jié)碼執(zhí)行,并將樣板代碼與核心應(yīng)用程序分開(kāi),可以帶來(lái)巨大的性能和容量?jī)?yōu)勢(shì),”Volk 說(shuō)。

6、會(huì)取代 JavaScript 嗎?

重點(diǎn)不在于 WebAssembly 是否會(huì)取代 JavaScript,因?yàn)闆](méi)有可預(yù)見(jiàn)的原因。相反,WebAssembly 將做的是擴(kuò)展 JavaScript 的范圍,使其更易于部署,而不僅僅是瀏覽器。

“我們?cè)?Fermyon 看到的一切讓我們感到驚訝。開(kāi)發(fā)人員要求在 WebAssembly 中執(zhí)行 JavaScript 和 TypeScript。我們從我們的社區(qū)聽(tīng)到的是,無(wú)服務(wù)器范式是他們喜歡的,而 JavaScript 只是他們?cè)跇?gòu)建無(wú)服務(wù)器功能時(shí)希望擁有的多種語(yǔ)言之一,”Butcher 說(shuō)?!八裕绻?Wasm 最初是 JavaScript 的補(bǔ)充,那么在某些方面這種關(guān)系已經(jīng)倒轉(zhuǎn)了?!?/p>

7、提供卓越的安全性?

與僅在 JavaScript 中部署的代碼相比,Wasm 可以提供安全優(yōu)勢(shì)。當(dāng) Wasm 被用作可以部署 JavaScript 應(yīng)用程序的“steroids編譯器”時(shí),Wasm 可以使 JavaScript 代碼更加安全。例如,Wasm 將 JavaScript 與瀏覽器隔離開(kāi)來(lái),確保內(nèi)存安全,并實(shí)現(xiàn)與 JavaScript 的動(dòng)態(tài)類(lèi)型變量相比更難利用的強(qiáng)類(lèi)型變量。

“Wasm 的安全模型可以讓龐大的 JavaScript 社區(qū)開(kāi)始創(chuàng)建完整的應(yīng)用程序,而不是只構(gòu)建前端并依靠后端開(kāi)發(fā)人員來(lái)完成其余的工作,”Volk 說(shuō)?!皩蝹€(gè) Wasm 模塊鏈接到基本應(yīng)用程序中,為傳統(tǒng) JavaScript 前端帶來(lái)活力的能力是一個(gè)令人興奮的觀點(diǎn)。想象一下,如果前端開(kāi)發(fā)人員能夠安全地在 MongoDB、Postgres 或 SalesForce API 上存儲(chǔ)和訪問(wèn)數(shù)據(jù),將會(huì)有怎樣的可能性?!?/p>

事實(shí)上,Wasm 在許多方面都提供了安全優(yōu)勢(shì)。這是因?yàn)?,正如網(wǎng)絡(luò)資產(chǎn)管理和治理解決方案提供商 JupiterOne 的首席信息安全官Sounil Yu所說(shuō):

Wasm 作為 JavaScript 的編譯器可以通過(guò)減少漏洞攻擊面、提供更好的內(nèi)存安全性、模糊代碼、沙盒化執(zhí)行環(huán)境和利用現(xiàn)有的安全生態(tài)系統(tǒng)來(lái)提高應(yīng)用程序的安全性。Wasm 具有有限的指令集和更好的內(nèi)存管理,這有助于減少漏洞的攻擊面并防止一些常見(jiàn)類(lèi)型的漏洞,例如緩沖區(qū)溢出。

Wasm 代碼通過(guò)晦澀難懂的方式提供了一點(diǎn)安全性,因?yàn)樗皇侨祟?lèi)可讀的,這使得攻擊者更難對(duì)代碼進(jìn)行逆向工程,從而更難發(fā)現(xiàn)和利用漏洞。

Wasm 還可以在沙盒環(huán)境中運(yùn)行,這有助于將代碼與系統(tǒng)的其余部分隔離開(kāi)來(lái),以防止它訪問(wèn)敏感信息或執(zhí)行非法操作。

Wasm 框架,如 CNCF 的wasmCloud,通過(guò)提供更高級(jí)別的抽象進(jìn)一步擴(kuò)展了 Wasm 安全足跡,減少了開(kāi)發(fā)人員嵌入每個(gè)應(yīng)用程序的代碼量。wasmCloud 還可以更輕松地對(duì)工件進(jìn)行簽名、啟用內(nèi)置監(jiān)控和自動(dòng)化應(yīng)用程序修補(bǔ),從而減輕開(kāi)發(fā)人員的安全負(fù)擔(dān)。

但我們不能說(shuō) JavaScript 天生就是不安全的。事實(shí)上,Javascript“可以變得非常安全,”微軟 Azure Core Upstream 的首席項(xiàng)目經(jīng)理 Ralph Squillace 在一封電子郵件回復(fù)中說(shuō)?!盀g覽器是地球上最受攻擊的表面之一。然而,WebAssembly 通過(guò)數(shù)學(xué)上可證明的沙箱模型更容易進(jìn)行深度防御,Veriwasm 等工具利用了這種模型,”他說(shuō)。

“此外,您可以使用即將推出的組件模型來(lái)限制攻擊面——例如,主機(jī)可能甚至不提供文件系統(tǒng) API——在未來(lái)的世界中,這些類(lèi)型的限制將被證明是至關(guān)重要的,”Squillace 說(shuō)?!暗灰挥夼褐鳈C(jī)仍然會(huì)犯配置錯(cuò)誤并為模塊提供過(guò)多的功率!”

原文鏈接:https://thenewstack.io/webassembly-the-ultimate-guide/

責(zé)任編輯:武曉燕 來(lái)源: 51CTO技術(shù)棧
相關(guān)推薦

2015-07-20 09:39:41

Java日志終極指南

2017-03-27 21:14:32

Linux日志指南

2012-08-21 06:53:00

測(cè)試軟件測(cè)試

2025-03-11 00:54:42

2022-02-09 09:00:00

云計(jì)算BigQuerySnowflake

2015-03-05 11:28:51

Linux桌面環(huán)境終極指南

2015-11-08 14:44:48

2023-08-31 22:40:01

2023-02-15 21:39:30

匯編語(yǔ)言軟件開(kāi)發(fā)

2022-03-28 09:52:42

JavaScript語(yǔ)言

2025-01-14 00:00:00

2020-07-19 08:15:41

PythonDebug

2013-12-18 09:36:08

企業(yè)移動(dòng)指南

2024-05-17 10:59:25

云計(jì)算谷歌云

2022-07-22 13:14:57

TypeScript指南

2023-05-23 18:31:14

Rust編程

2011-07-14 11:24:23

2021-07-07 05:50:06

SD-WAN軟件定義廣域網(wǎng)網(wǎng)絡(luò)

2022-06-06 07:24:09

Caddy開(kāi)源Ubuntu

2022-06-30 08:00:00

MySQL關(guān)系數(shù)據(jù)庫(kù)開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)