寶貝,帶上WebAssembly,換個姿勢來優化你的前端應用

在你沒崛起之前,臉是用來丟的

大家好,我是柒八九。一個專注于前端開發技術/RustAI應用知識分享Coder

此篇文章所涉及到的技術有

  1. WebAssembly
  2. Rust
  3. Web Worker(comlink)
  4. wasm-pack
  5. Photon
  6. ffmpeg.wasm
  7. 腳手架生成前端項目

因為,行文字數所限,有些概念可能會一帶而過亦或者提供對應的學習資料。請大家酌情觀看。


前言

說起,前端性能優化,大家可能第一時間就會從網絡/資源加載/壓縮資源等角度考慮。

正如下面所展示的一樣。

上面所列的措施,是我們常規優化方案。針對上面的內容我們有機會來講講該如何做。

而今天呢,我們和大家嘮嘮利用WebAssembly來優化前端渲染鏈路或者針對關鍵節點進行調優處理。


好了,天不早了,干點正事哇。

我們能所學到的知識點

  1. WebAssembly是個啥?
  2. 項目初始化&配置
  3. Rust項目初始化
  4. 處理耗時任務
  5. 圖像處理
  6. 優化音視頻
  7. 優化游戲體驗

1. WebAssembly是個啥?

之前,我們在瀏覽器第四種語言-WebAssembly已經對WebAssembly有過介紹,為了行文的完整,我們再用簡短的內容解釋一下它。

WebAssembly是一種二進制指令格式,旨在在瀏覽器中高效執行。

  • 作為JavaScript的補充,允許我們用RustC++C等語言編寫性能關鍵代碼,并在瀏覽器中運行(還記得我們前幾天的文章Rust 賦能前端 – 寫一個 File 轉 Img 的功能分別講了將C/Rust編寫成wasm用于文檔解析)。
  • 通過將代碼編譯成Wasm,它變得平臺無關,并且可以以接近本地的速度運行。
  • Rust是一種以安全性和性能著稱的系統編程語言,由于其強大的保證和與Wasm的無縫集成,已經在WebAssembly生態系統中獲得了廣泛的關注。(如果想了解更多Rust相關內容,可以參考我們的Rust學習筆記系列文章)
  • WebAssembly為網絡開發開辟了新的可能性,在一些復雜任務如游戲引擎、圖像處理等方面有著顯著的性能提升。

WebAssembly 的優勢

WebAssembly的一個最具說服力的特點是其在計算密集型任務中的性能提升。例如,在對龐大數據集進行復雜的統計計算時,WebAssembly 可能比常規的 JavaScript 快得多。這是因為 WebAssembly 的高度優化設計使得代碼執行速度遠遠超過 JavaScript

WebAssembly 的另一個優點是其可移植性。跨平臺應用程序的開發變得非常簡單,因為可以從多種語言生成 WebAssembly 代碼,并在任何平臺上執行。

最后,安全性也是 WebAssembly 架構中的一個重要考慮因素。由于 WebAssembly 提供了沙箱執行環境,代碼無法訪問敏感數據或運行惡意代碼。

下面是了解和學習WebAssemblyRoadMap


2. 項目初始化&配置

進入正題之前,我們還是和之前一樣,使用我們自己的腳手架-f_cli_f構建一個以Vite為打包工具的前端項目。

在本地合適的目錄下執行如下代碼:

npx f_cli_f create wasm_preformance

然后,我們在pages中新建如下的目錄結構

其中wasm存放的是我們已經構建好的wasm的資源。

配置Web Worker

由于我們在項目中會用到Web Worker,所以我們還需要對其做一定的配置。之前呢,我們在React中使用多線程—Web Worker中介紹過,如何在React+Vite的項目中使用Web Worker

而今天,我們再介紹另外一種更加優雅的方式 - Comlink。

Comlink是一個由Google Chrome Labs開發的輕量級庫,它旨在簡化Web Worker與主線程之間的通信,讓我們能夠充分利用多線程處理的威力,提升前端應用性能。

由于,我們是用Vite搭建的前端項目,所以我們還需要在項目中借助vite-plugin-comlink。

我們可以通過如下代碼安裝對應的依賴。

yarn add -D vite-plugin-comlink
yarn add comlink

然后,將對應的庫配置到vite.config.js中。

import { comlink } from "vite-plugin-comlink";export default {plugins: [comlink()],worker: {plugins: () => [comlink()],},
};

這里有一點需要額外注意,comlink要放置在plugins第一個位置。

針對TypeScript項目,我們還需要在vite-env.d.ts中新增/// <reference types="vite-plugin-comlink/client" />

然后我們就可以用優雅的方式來使用WebWorker了。

可以看到,使用了comlink后,我們在使用多線程能力時,不需要寫那么多模板代碼,而是通過Promise來接收從子線程返回的數據。

關于Web Worker的相關內容,可以看我們之前的文章

  • Web性能優化之Worker線程&#x

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23633.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23633.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23633.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BOM是什么東西

BOM&#xff08;Byte Order Mark&#xff0c;字節順序標記&#xff09;是一個Unicode字符&#xff0c;通常出現在文本文件的開頭。它的作用包括以下幾個方面&#xff1a; 1. 指示文件的編碼方式 BOM可以幫助軟件識別文本文件使用的字符編碼。不同的編碼方式可能會使用不同的B…

經濟與安全兼顧:茶飲店購買可燃氣體報警器的價格考量

可燃氣體報警器在如今的社會中扮演著至關重要的角色。它們用于檢測環境中的可燃氣體濃度&#xff0c;及早發現潛在的火災隱患&#xff0c;保護人們的生命和財產安全。 在這篇文章中&#xff0c;佰德將介紹可燃氣體報警器的安裝、檢定以及價格&#xff0c;通過實際案例和數據&a…

PCL 生成空間橢圓點云

目錄 一、算法原理二、代碼實現三、結果展示本文由CSDN點云俠原創,原文鏈接。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲。 一、算法原理 設橢圓在 X O Y XOY XOY平面上,參數方程為:

怎么保障TikTok直播網絡穩定?

TikTok&#xff0c;這個近年來風靡全球的社交媒體平臺&#xff0c;已成為電商引流的新方向&#xff0c;尤其是其直播功能。然而&#xff0c;對于打算進軍TikTok直播領域的商家和主播而言&#xff0c;確保網絡穩定無疑是首要任務。那么&#xff0c;TikTok直播專線究竟是什么呢&a…

牛啊后續:如何一行C#代碼實現解析類型的Summary注釋(可用于數據字典快速生成)...

前言&#xff1a;下午有小伙伴要求&#xff0c;讓我繼續做個解析實體類注釋信息的內容。所以我也順便加入進來。以下開始正文實戰操作&#xff1a; 項目需要勾選輸出api文檔文件。這樣就可以讓所有實體類的summary信息被寫入到輸出目錄下。如果有多個xml文件也沒關系&#xff0…

小程序 UI 風格美不勝收

小程序 UI 風格美不勝收 小程序 UI 風格美不勝收

PostgreSQL的視圖pg_stat_replication

PostgreSQL的視圖pg_stat_replication pg_stat_replication 是 PostgreSQL 提供的一個系統視圖&#xff0c;用于顯示主服務器上當前正在進行的復制會話的信息。它可以幫助數據庫管理員監控和管理主從復制的狀態&#xff0c;確保數據的正確同步和高可靠性。 pg_stat_replicati…

MyEclipse中properties文件中文亂碼(Unicode字符)解決辦法

程序代碼園發文地址&#xff1a;MyEclipse中properties文件中文亂碼&#xff08;Unicode字符&#xff09;解決辦法-程序代碼園小說,Java,HTML,Java小工具,程序代碼園,http://www.byqws.com/ ,MyEclipse中properties文件中文亂碼&#xff08;Unicode字符&#xff09;解決辦法htt…

Django學習三:views業務層中通過models對實體對象進行的增、刪、改、查操作。

文章目錄 前言一、Django ORM介紹二、項目快速搭建三、操作1、view.pya、增加操作b、刪除操作c、修改操作d、查詢操作 2、urls.py 前言 上接博文&#xff1a;Django學習二&#xff1a;配置mysql&#xff0c;創建model實例&#xff0c;自動創建數據庫表&#xff0c;對mysql數據…

一周發文9篇!MIMIC-IV數據庫周報(5.22~5.28)

重癥醫學數據庫&#xff08;MIMIC&#xff09;是由計算生理學實驗室開發的公開數據集&#xff0c;其中包括與數千個重癥監護病房入院相關的去識別化健康數據&#xff0c;致力于推動臨床信息學、流行病學和機器學習的研究。 MIMIC數據庫于2003年在美國國立衛生研究院的資助下&am…

2024上海初中生古詩文大會倒計時4個半月:單選題真題示例和獨家解析

現在距離2024年初中生古詩文大會還有4個半月時間&#xff0c;我們來看10道選擇題真題和詳細解析&#xff0c;了解古詩文大會的考察方式和知識點&#xff0c;從而更好地備考。 以下題目截取自我獨家制作的在線真題集&#xff0c;都是來自于歷屆真題&#xff0c;去重、合并后&am…

數據倉庫緩慢變化維介紹

緩慢變化維&#xff08;Slowly Changing Dimensions, SCD&#xff09;是數據倉庫設計中的一個重要概念&#xff0c;用于處理維度表中隨時間緩慢變化的屬性。維度表中的數據通常描述業務實體&#xff08;如客戶、產品、員工等&#xff09;&#xff0c;而這些實體的某些屬性&…

面試成功的不二法門:詳解Vue3答題章法

前言 面試題在網絡上有如海洋之深&#xff0c;對于同一知識點&#xff0c;每個人的理解也各有千秋。我們在面試中常常會遇到一個瞬息間腦海里一片空白的情況&#xff0c;其實這并不是因為我們不懂&#xff0c;而是因為我們在回答的時候缺乏一個清晰的思路。那么問題來了&#x…

《魔法與科技的融合:SpringBoot運維的現代傳說》

揭開了SpringBoot應用部署的神秘面紗。從云平臺的選型到Docker的容器化魔法&#xff0c;再到Kubernetes的集群力量&#xff0c;每一步都充滿了奇幻色彩。文章以輕松幽默的筆觸&#xff0c;帶領讀者穿梭于現代應用部署的各個角落&#xff0c;探索自動化部署的奧秘&#xff0c;學…

關于圖像過曝問題的排查思路

1、問題背景 讀者提問&#xff0c;圖像在室外遇到過曝的問題&#xff0c;有什么排查思路和改善方法。 2、問題分析 1&#xff09;先檢查一下sensor驅動&#xff0c;對照 sensor datasheet 確認下最小曝光行設置的是否正確&#xff0c; 因為室外高亮場景一般曝光行走的都比較…

【深度學習】PuLID: Pure and Lightning ID Customization via Contrastive Alignment

論文&#xff1a;https://arxiv.org/abs/2404.16022 代碼&#xff1a;https://github.com/ToTheBeginning/PuLID 文章目錄 AbstractIntroductionRelated WorkMethods Abstract 我們提出了一種新穎的、無需調整的文本生成圖像ID定制方法——Pure and Lightning ID customizatio…

微信好友朋友圈的三天、半年可見怎么破?方法拿走不謝

『Code掘金』問大家&#xff0c;有沒有這種經歷&#xff0c;當你想去翻某人的朋友圈時&#xff0c;對方設置成了3天可見&#xff0c;之前的內容沒法看到了。 不過沒關系&#xff01;今天『Code掘金』給大家分享一款導出朋友圈的工具&#xff0c;讓大家留住痕跡。 WechatMomen…

PostgreSQL中有沒有類似Oracle的dba_objects系統視圖

PostgreSQL中有沒有類似Oracle的dba_objects系統視圖 在PostgreSQL中&#xff0c;沒有一個完全集成了所有對象信息的視圖&#xff08;類似于Oracle中的DBA_OBJECTS&#xff09;。但是&#xff0c;PostgreSQL提供了一些系統目錄表和視圖&#xff0c;可以用來獲取數據庫對象的信…

初探沁恒CH32V307VCT6評估板 1-1外部中斷EXTI

旋轉編碼器計次 1&#xff0c;創建 .C .H 文件 Count_Sonser.c Count_Sonser.h 2&#xff0c;包含頭文件 #include "ch32v30x.h" //#include "debug.h" #include "Count_Sonser.h" 注意&#xff1a;如果不包含第一第二個頭文件uint、int這…

如何掌握 Java 正則表達式 的基本語法及在 Java 中的應用

正則表達式是一種用于匹配字符串的模式&#xff0c;在許多編程語言中廣泛使用。Java 正則表達式提供了強大的文本處理能力&#xff0c;能夠對字符串進行查找、替換、分割等操作。 一、正則表達式的基本語法 正則表達式由普通字符和特殊字符組成。普通字符包括字母、數字和標點…