即時(shí)通訊(IM)開源項(xiàng)目OpenIM對(duì)WebAssembly支持,提升web端體驗(yàn)

WebAssembly 是什么曙求?

2019 年 12 月,W3C 標(biāo)準(zhǔn)批準(zhǔn)了第四種官方語(yǔ)言:WebAssembly (Wasm)映企。這種語(yǔ)言在結(jié)構(gòu)悟狱、使用和功能方面與以前的語(yǔ)言有很大不同。

WebAssembly 是一種新的編碼方式堰氓,可以在現(xiàn)代的Web瀏覽器中運(yùn)行 - 它是一種低級(jí)的類匯編語(yǔ)言挤渐,具有緊湊的二進(jìn)制格式,可以接近原生的性能運(yùn)行双絮,并為諸如 C / C ++等語(yǔ)言提供一個(gè)編譯目標(biāo)浴麻,以便它們可以在 Web 上運(yùn)行。它也被設(shè)計(jì)為可以與 JavaScript 共存囤攀,允許兩者一起工作软免。

對(duì)于Web平臺(tái)而言,WebAssembly 具有巨大的意義——它提供了一條途徑焚挠,以使得以各種語(yǔ)言編寫的代碼都可以以接近原生的速度在 Web 中運(yùn)行膏萧。在這種情況下,以前無(wú)法以此方式運(yùn)行的客戶端軟件都將可以運(yùn)行在 Web 中蝌衔。

WebAssembly 被設(shè)計(jì)為可以和 JavaScript 一起協(xié)同工作——通過(guò)使用 WebAssembly 的 JavaScript API榛泛,你可以把 WebAssembly 模塊加載到一個(gè) JavaScript 應(yīng)用中并且在兩者之間共享功能。這允許你在同一個(gè)應(yīng)用中利用 WebAssembly 的性能和威力以及 JavaScript 的表達(dá)力和靈活性噩斟。

什么時(shí)候使用WebAssembly曹锨?

開發(fā)人員可能希望在兩種一般情況下使用 Wasm。一種是作為想要編寫性能更高的代碼的 Web 開發(fā)人員剃允。另一種是作為軟件開發(fā)人員沛简,希望將現(xiàn)有技能與其他編程語(yǔ)言(如 C++ 或 Rust)結(jié)合使用來(lái)構(gòu)建在 Web 上運(yùn)行并通過(guò) Web 瀏覽器訪問(wèn)用戶的軟件,而無(wú)需額外的步驟(例如下載和安裝程序)斥废。 雖然開發(fā)人員在第一種情況下仍需要使用 JavaScript椒楣,但他們也可以使用 Wasm 將需要接近原生速度的部分生成為模塊并使用 JS 加載它們。這是因?yàn)?JS 和 WebAssembly 模塊之間雙向通信的能力使應(yīng)用程序能夠利用 WebAssembly 的出色性能营袜。

開發(fā)人員可以繼續(xù)使用 React 等流行的

UI 庫(kù)來(lái)構(gòu)建 Web 應(yīng)用程序的 UI,并間接使用 Wasm 來(lái)實(shí)現(xiàn)高性能的內(nèi)部邏輯丑罪。Figma 等流行的應(yīng)用程序通過(guò)使用 React 和 C++ 采用了這種技術(shù)荚板。 對(duì)于第二種情況凤壁,開發(fā)人員可以使用 Rust、C++ 或 C# 等語(yǔ)言與 Blazor 一起編寫 Web 應(yīng)用程序跪另∨《叮或者甚至用 C# 設(shè)計(jì)一個(gè)游戲并輕松將其編譯為 Wasm,然后通過(guò)網(wǎng)絡(luò)將其提供給消費(fèi)者免绿。

簡(jiǎn)而言之唧席,開發(fā)人員可以通過(guò)以下方式使用 Wasm:

除了 JS,開發(fā)者還可以在 Wasm 中編寫高性能的關(guān)鍵性代碼嘲驾,并用 JS 導(dǎo)入淌哟。

開發(fā)人員可以使用 Wasm 作為編譯目標(biāo),編寫使其他編程語(yǔ)言能夠在 Web 上運(yùn)行的代碼辽故。

OpenIM通過(guò)WebAssembly解決了什么問(wèn)題徒仓?

OpenIM是由IM技術(shù)專家打造的開源的即時(shí)通訊組件。OpenIM包括IM服務(wù)端和客戶端SDK誊垢,實(shí)現(xiàn)了高性能掉弛、輕量級(jí)、易擴(kuò)展等重要特性喂走。開發(fā)者通過(guò)集成OpenIM組件殃饿,并私有化部署服務(wù)端,可以將即時(shí)通訊芋肠、實(shí)時(shí)網(wǎng)絡(luò)能力快速集成到自身應(yīng)用中乎芳,并確保業(yè)務(wù)數(shù)據(jù)的安全性和私密性。

目前github 11k star业栅,上萬(wàn)開發(fā)者秒咐,廣泛應(yīng)用在政務(wù)協(xié)同辦公,社交等領(lǐng)域碘裕。重點(diǎn)有如下特色

(1)開源:核心代碼開源携取,數(shù)據(jù)自我掌控,打造全球領(lǐng)先的IM開源社區(qū)帮孔,括客戶端SDK和服務(wù)端雷滋,打造全球領(lǐng)先的IM開源社區(qū)。

(2)易擴(kuò)展:服務(wù)端采用golang實(shí)現(xiàn)文兢,首創(chuàng)“一切皆消息”的通訊模型晤斩,輕松實(shí)現(xiàn)自定義消息和擴(kuò)展功能。

(3)高性能:支持集群分層治理架構(gòu)姆坚,經(jīng)受過(guò)海量用戶檢驗(yàn)澳泵,抽象在線消息、離線消息兼呵、歷史消息存儲(chǔ)模型兔辅。

(4)全平臺(tái)支持:iOS腊敲、Android原生;Flutter维苔、uni-app碰辅、ReactNative跨端;React介时、Vue等所有主流web前端框架没宾;小程序;PC支持Electron沸柔。

我們的客戶端SDK底層庫(kù)openim-sdk-core是通過(guò)Go語(yǔ)言編寫循衰,并通過(guò)Gomobile工具打包為AAR和Framework庫(kù)輕松集成到Android和iOS兩端,并且擴(kuò)展支持了部分主流跨平臺(tái)開發(fā)框架如:Flutter 勉失、ReactNative羹蚣、Uniapp等。

現(xiàn)在我們借助WebAssembly技術(shù)將openim-sdk-core再次移植到了Web平臺(tái)乱凿,底層復(fù)用一套代碼顽素,降低了SDK的維護(hù)成本,同時(shí)充分發(fā)揮wasm的特性徒蟆。幫助開發(fā)者可以更加快速胁出、穩(wěn)定的將即時(shí)通訊、實(shí)時(shí)網(wǎng)絡(luò)能力集成到自身應(yīng)用中段审。

同時(shí)全蝶,我們還借助sql.js(同樣使用emscripten將SQLite編譯為 webassembly)和IndexedDB在Web環(huán)境中增加了消息本地存儲(chǔ)能力,這使得SDK整體使用更加高效寺枉。當(dāng)前大多數(shù)IM的JSSDK都是直接通過(guò)API每次到服務(wù)器拉取大量數(shù)據(jù)抑淫,給服務(wù)器帶來(lái)巨大壓力的同時(shí)也讓用戶可能獲得不太好的體驗(yàn),如弱網(wǎng)環(huán)境下獲取聊天記錄的漫長(zhǎng)等待姥闪。但在open-im-sdk-wasm中始苇,因?yàn)橄⒂涗浂急粌?chǔ)存在了IndexedDB中,使得用戶可以穩(wěn)定達(dá)到100~200ms內(nèi)拉取記錄的絲滑體驗(yàn)筐喳。

github地址:

https://github.com/OpenIMSDK/

官網(wǎng):https://www.rentsoft.cn/

WebAssembly的未來(lái)

WebAssembly 是作為客戶端技術(shù)發(fā)明的催式,但它也被證明在服務(wù)器端非常有用。 服務(wù)器端 WebAssembly 在現(xiàn)代 Web 和服務(wù)端應(yīng)用程序中都存在至關(guān)重要的優(yōu)勢(shì)避归。

高性能荣月。WebAssembly 實(shí)現(xiàn)了接近原生的性能。與 Java梳毙、Python 或 JavaScript 運(yùn)行時(shí)相比哺窄,它可以快 10 倍到 100 倍(這怎么可能?)。它也比 Docker 快得多萌业,尤其是在冷啟動(dòng)和系統(tǒng)訪問(wèn)方面蔑担。

安全。WebAssembly 是一個(gè)具有基于能力的安全模型的沙箱咽白。它不僅比原生二進(jìn)制文件更安全,而且比 Docker 這樣的操作系統(tǒng)級(jí)容器更安全鸟缕。然而晶框,它提供了對(duì)底層系統(tǒng)的訪問(wèn),包括新的硬件功能懂从。

可移植授段。WebAssembly 應(yīng)用程序可以用 C、C++番甩、Rust侵贵、Go 編寫,并且無(wú)需更改即可在不同的操作系統(tǒng)和硬件平臺(tái)上運(yùn)行缘薛。

易于管理窍育。WebAssembly 程序可以由其他應(yīng)用程序配置、啟動(dòng)宴胧、熱交換漱抓、停止和移動(dòng)。

WASI是一種將 WebAssembly 跑在任何系統(tǒng)上的標(biāo)準(zhǔn)化系統(tǒng)接口恕齐,當(dāng) WebAssembly 的性能逐漸增強(qiáng)時(shí)乞娄,WASI 可以提供一種可行的方式,在任意平臺(tái)上運(yùn)行任意的代碼显歧,就像 Docker 所做的一樣仪或,但是不需要受限于操作系統(tǒng)。正如 Docker 的創(chuàng)始人所說(shuō):

“ 如果 WASM 和 WASI 早在 2008 年就存在士骤,那么我們就不需要?jiǎng)?chuàng)建 Docker范删。可見 Wasm 是多么重要敦间。服務(wù)器上的 WebAssembly 將會(huì)是“計(jì)算”的未來(lái)模式瓶逃。而現(xiàn)在的問(wèn)題是缺少標(biāo)準(zhǔn)化的系統(tǒng)接口。希望 WASI 能夠勝任這項(xiàng)工作廓块!“

Wasm 雖然起源于 Web厢绝,但如今,它已經(jīng)不止于 Web带猴。那就讓我們來(lái)一起期待 Wasm 帶來(lái)的昔汉,那個(gè)擁有無(wú)限可能的世界吧!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市靶病,隨后出現(xiàn)的幾起案子会通,更是在濱河造成了極大的恐慌,老刑警劉巖娄周,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涕侈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡煤辨,警方通過(guò)查閱死者的電腦和手機(jī)裳涛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)众辨,“玉大人端三,你說(shuō)我怎么就攤上這事【槌梗” “怎么了郊闯?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蛛株。 經(jīng)常有香客問(wèn)我团赁,道長(zhǎng),這世上最難降的妖魔是什么谨履? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任然痊,我火速辦了婚禮,結(jié)果婚禮上屉符,老公的妹妹穿的比我還像新娘剧浸。我一直安慰自己,他們只是感情好矗钟,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布唆香。 她就那樣靜靜地躺著,像睡著了一般吨艇。 火紅的嫁衣襯著肌膚如雪躬它。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天东涡,我揣著相機(jī)與錄音冯吓,去河邊找鬼。 笑死疮跑,一個(gè)胖子當(dāng)著我的面吹牛组贺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祖娘,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼失尖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起掀潮,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤菇夸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后仪吧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庄新,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年薯鼠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了摄咆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡人断,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出朝蜘,到底是詐尸還是另有隱情恶迈,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布谱醇,位于F島的核電站暇仲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏副渴。R本人自食惡果不足惜奈附,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望煮剧。 院中可真熱鬧斥滤,春花似錦、人聲如沸勉盅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)草娜。三九已至挑胸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宰闰,已是汗流浹背茬贵。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留移袍,地道東北人解藻。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像葡盗,于是被迫代替她去往敵國(guó)和親舆逃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容