WebAssembly在性能及加密場景的深度探索

隨着 Web 技術的不斷髮展, WebAssembly 非常有技術前景。儘管很多公司已經嘗試並落地 WebAssembly ,但仍有很多公司及開發者處於觀望狀態,他們並不瞭解如何將 WebAssembly 融入到現有的項目中。coupang 優先嚐試 WebAssembly 並落地 ,將其融入到自己的項目中 ,目前對 WebAssembly 的探索已經小有成就。

在即將於12月20~21日舉行的 GMTC 全球大前端技術大會 (深圳站) 上,coupang 高級軟件開發工程師趙洋老師將分享《WebAssembly 在性能及加密場景的深度探索》。屆時,他將通過 coupang 實際落地的兩個項目,分享這兩個項目不斷演進的過程以及未來的發展方向,深入探討 WebAssembly 的性能及保密相關的優勢。通過分享讓大家有所啓發,並能夠逐步引入 WebAssembly 技術提升自身的開發效率和產品體驗。以下是InfoQ對趙洋老師的會前採訪。

InfoQ: 請您簡單介紹下自己以及自己所負責的工作。

趙洋: 我個人職業經歷比較豐富,曾在百度、騰訊擔任過前端工程師,也在全民直播這樣的創業公司擔任過前端開發經理;目前在 coupang 的 CMG 團隊擔任高級軟件開發工程師。

coupang 是一個非常具有前景但很低調的獨角獸公司,主要從事韓國電商相關的業務,目前也在積極發展國內商家的入駐。我所屬的 CMG 在公司內部是一個非常年輕的團隊,目前主要負責廣告媒體平臺的相關工作。coupang 非常崇尚 Work Life Balance,並且鼓勵個人對外發聲和貢獻社區,因此我個人除了在公司團隊內部貢獻力量外,也時常編寫一些圍繞 WebAssembly 相關的開源項目,包括 SecurityWorkerWXInlinePlayer 等,同時也會參與一些著名開源項目,爲之貢獻代碼,比如 ShadowNode、Vue 等。

InfoQ: 1995 年 JavaScript 誕生,2008 年瀏覽器加入即時編譯器 JIT,JavaScript 的運行速度快了 10 倍。有人說,現在的 WebAssembly 是另一個轉折點,您怎麼看?

趙洋: 相較於 JavaScript 而言,WebAssembly 的性能提升是我們感受最明顯的部分,在我們的業務場景測試中,對於 CPU 密集相關的應用來說,WebAssembly 確實有非常巨大的提升。但由於我們的大部分前端項目主要面向 UI 場景,在這個場景中 WebAssembly 與 JavaScript 需要頻繁的相互調用並交換數據,導致通信成本比計算成本要高得多。因此,如何更好地利用 WebAssembly 仍然需要因地制宜,根據自己的場景來測試和選擇。從技術趨勢來看,隨着 5G 技術的出現和硬件性能的提升,我們可以預見,Web 平臺能夠承擔的複雜工作會越來越多,儘管 V8 每年仍會提升 JavaScript 的性能,但這種提升逐漸變緩,JavaScript 已經慢慢變爲整個 Web 平臺發展的瓶頸,所以 WebAssembly 的出現無疑是非常讓人興奮的。這並不是說 WebAssembly 會取代 JavaScript,前端工程師們也無須擔心這種情況的發生,我覺得兩種技術應該會不斷融合,最終爲 Web 創造更多可能性。

InfoQ:coupang 當初引入該技術的契機是什麼?

趙洋: 我們的大部分前端項目面向 UI 場景, WebAssembly 與 JavaScript 需要頻繁地相互調用並交換數據,我們主要使用 JavaScript 編寫相關代碼,然後採用混淆等方式增大代碼被破譯的難度,但從數據上看,效果並不是很好。

再加上 C/C++ 代碼由風控團隊編寫和維護,他們能夠很方便地編譯到 iOS 和 Android 端;對於 Web 端來說,我們需要不斷地同步他們的代碼,並將 C/C++ 代碼改寫爲 JavaScript ,由於風控的策略相關代碼更新非常頻繁和瑣碎,這樣不但會降低工作效率,還加大了開發成本。

所以我們引入了 WebAssembly ,這樣就可以更好地複用 C/C++ 代碼,其中包括人機識別的日誌內容加密、活動頁面的請求加密等,不僅跨部門跨團隊能有效溝通提升工作效率,還能減少開發成本。

InfoQ: 未來,您認爲 WebAssembly 將會如何發展?會有哪些典型的應用場景?

趙洋: 相對於 WebAssembly 更多被提及的性能,我覺得大家還應該把目光放在代碼複用上。現在,越來越多的平臺和語言開始支持 WebAssembly,我相信在未來也會有更多的新技術成果出現在 Web 平臺上,從而使得 Web 具有更多的可能性。目前 WASI(WebAssembly System Interface)的出現已經逐步讓 WebAssembly 的使用場景更爲寬廣。通過 WebAssembly 對其他平臺、語言的代碼進行更好的複用,我覺得這是非常重要且正確的路線。

InfoQ: WebAssembly 在性能及加密場景的探索中遇到的最大的難點是什麼?團隊是解決的?

趙洋: 在我們的實踐中 ,WebAssembly 在性能上遇到的最大難點是,目前優化手段十分有限。例如,其多線程相關的支持還不太可用,也不支持彙編代碼編譯、AVX 指令等,但這些問題在之後的版本中應該會逐漸解決。而在加密場景中,我們目前仍然沒有解決的問題是, WebAssembly 編譯後 Codebase 過大。後期我們會和風控團隊合作,逐步精簡目前的庫代碼,使得 Codebase 進一步減少。目前風控日誌加密這塊收益比較大,過濾了 Web 端大量不專業的羊毛黨用戶,降低了公司的損失。

InfoQ: 京東、淘寶在前端也有基於 WebAssembly 的探索,coupang 在 WebAssembly 的應用上與之相比,有何異同?

趙洋: 相比於京東或淘寶來說,coupang 還是非常年輕的。因此,在技術以及產品上我們也在不斷學習兩家的優點,並對好的部分做一些內化和提升。同時,coupang 在 WebAssembly 的應用會更加直接面向用戶,而不僅僅是內部探索。當然,目前 WebAssembly 在 coupang 的使用主要還是針對一些小的場景點進行提升、優化,仍然有非常大的提升空間。

InfoQ: WebAssembly 也出現了一段時間,就技術本身而言我們更想知道您即將在 GMTC 分享的兩個實踐案例,可以簡單介紹下嗎?

趙洋: 這次分享,主要通過我開源的兩個項目 WXInlinePlayer 和 SecurityWorker 來介紹自己對 WebAssembly 的一些理解和實踐經驗。

WXInlinePlayer 是一個通過 WebAssembly 解碼 FLV 的播放器項目,主要是爲了解決移動端 Web 播放器體驗不一致的問題,相較於手淘、花椒以往使用 WebAssembly+FFmpeg 進行的技術探索而言,WXInlinePlayer 通過自己實現 I/O、解碼、渲染層等,大幅度減小了播放器核心的代碼大小,並且針對於直播場景添加了一些減少延遲及優化體驗的策略。屆時我將和大家分享 WXInlinePlayer 的架構及實現細節,並一起探討未來 WXInlinePlayer 的一些可行的性能提升策略。

SecurityWorker 是一個類似於 WebWorker 的獨立 VM,其中使用了 WebAssembly 和 Duktape,並且自己實現了一些 Opcode 的設計和實現。其主要場景是用來保護業務中核心的 JavaScript 通訊邏輯。其參考了 Google reCAPTCHA 以及 Native 端的一些代碼保護手段(VMP),目前 SecurityWorker 這套技術穩定使用在 coupang 的 Web 的風控日誌加密上。我會和大家詳細介紹 SecurityWorker 的前世今生,以及未來的規劃。

活動推薦
在即將到來的 GMTC 深圳 2019 上,趙洋老師還會具體分享到,如何更好地保護前端的核心代碼?如何更好地適配 Mobile 端播放器?以及常規的代碼保護方案、Google reCAPTCHA 所採用的方案調研、WebAssembly 的落地方案、各方案優劣勢對比、如何結合自身的場景去提升性能、縮小生成體積、增強編碼體驗等。

除了趙洋老師的分享,本次 GMTC 全球大前端技術大會(深圳站)2019 我們還設置了小程序挑戰與應對、音視頻技術、Serverless 實踐、前端測試與安全、大前端工程化、Flutter 實戰、新興編程語言、團隊建設與管理等熱門技術專場。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章