編譯器:swc 究竟比 babel 快在哪里?

前言

swc 與 babel 都是 JavaScript 編譯器,它們的主要功能是將 ES2015+ 以及 TypeScript, Flow, JSX 等語法轉換為瀏覽器或環境中的向后兼容的 JavaScript 代碼。

哪里快了?

1. 開發語言的優勢

swc 是用 Rust 語言開發的,而 babel 是用 JavaScript 語言開發的。這意味著 swc 可以利用 Rust 的性能優勢,如無 GC(垃圾回收機制)、系統級語言、多核 CPU 支持等,而 babel 則受限于 JavaScript 的性能問題,如 GC、單線程等。

2. AST 樹透傳

swc 在編譯代碼時并不需要將 AST 樹透傳下去,而是直接在內存中進行轉換。這樣可以避免多次遍歷 AST 樹,提高編譯效率。而 babel 則需要將 AST 樹傳遞給每一個插件,這樣會增加編譯時間和內存消耗

3. 編譯后的代碼更快

swc 可以將 JavaScript 代碼編譯為 WebAssembly,這樣可以提高代碼的執行速度。而 babel 則只能編譯為 JavaScript 代碼,無法利用 WebAssembly 的優勢。

總結

  • swc 相比于 babel 的優勢主要是編譯速度和執行速度方面,根據官方測試,swc 有至少 10 倍以上的性能優勢。但是 babel 的優勢主要是插件系統和生態方面,babel 有更多的插件和框架支持,可以處理更復雜的 JavaScript 項目。
  • 目前,swc 已經被 Next.js 等前端框架采用,未來有望在前端工程化領域發揮更大的作用。而 babel 仍然是目前最流行的 JavaScript 編譯器,被 Vue, React, Angular 等框架廣泛使用。

/-------------------------------------------------- 擴展知識 ------------------------------------------------------/

Rust 無 GC 的原因?

它使用了一種叫做所有權的機制來管理內存

  • 所有權的基本思想:每個值都有一個唯一的所有者,當所有者離開作用域時,值就會被自動釋放。這樣就避免了內存泄漏和懸垂指針的問題,也不需要運行時的垃圾回收器來跟蹤和清理內存。

Rust 還引入了借用和生命周期的概念,來控制對值的訪問和修改。借用就是臨時使用一個值的引用,而不是擁有它。生命周期就是一個值或者一個引用在程序中存在的時間段。Rust 編譯器會檢查借用和生命周期是否符合一些規則,來保證內存安全和數據一致性。

Rust 的這種內存管理方式,既可以保證程序的正確性,又可以提高程序的性能,因為它不需要額外的內存開銷和垃圾回收的暫停。這也是 Rust 被稱為“零成本抽象”的原因之一。

系統級語言

系統級語言是指那些可以直接操作硬件和底層系統的編程語言

它們通常具有以下特點:

  • 語法簡潔,指令集小,編譯速度快,運行效率高
  • 支持指針和內存管理,可以訪問和修改內存地址和寄存器
  • 支持匯編語言的嵌入和調用,可以實現與硬件的交互
  • 支持多種數據類型和結構,可以表示和處理復雜的數據
  • 支持靜態編譯和鏈接,可以生成可執行的二進制文件,不需要運行時環境

系統級語言的代表有 C, C++, Rust, Go 等,它們被廣泛用于開發操作系統,驅動程序,嵌入式系統,游戲引擎等領域。系統級語言的優勢是性能高,控制力強,可移植性好,但是也有一些缺點,如語法復雜,調試困難,內存安全難以保證等。

WebAssembly

WebAssembly 是一種開放的網絡標準,由 W3C WebAssembly Community Group 開發,并得到了主要瀏覽器廠商的支持。目前,WebAssembly 已經被一些前端框架和工具采用,如 Next.js, Astro, SvelteKit, Blazor, Emscripten 等。

  • 一種低級的類匯編語言 可以在現代網絡瀏覽器中運行,具有緊湊的二進制格式,可以接近原生的性能運行,并為諸如 C, C++ 和 Rust 等語言提供一個編譯目標,以便它們可以在 Web 上運行。它也被設計為可以與 JavaScript 共存,允許兩者一起工作。

  • 快速、高效、可移植和安全 它可以解決一些 JavaScript 在性能方面的問題,特別是對于 3D 游戲、虛擬現實、增強現實、計算機視覺、圖像/視頻編輯等領域的應用。WebAssembly 的模塊可以被導入到一個網絡應用中,并且暴露出供 JavaScript 使用的函數,JavaScript 也可以把函數導入到 WebAssembly 模塊中,實現雙向的互操作。

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

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

相關文章

MS5228/5248/5268:2.7V 到 5.5V、 12/14/16Bit、內置基準、八通道數模轉換器

MS5228/MS5248/MS5268 是一款 12/14/16bit 八通道輸出的電壓型 DAC ,內部集成上電復位電路、可選內部基準、接口采用四線串口模式, 最高工作頻率可以到 40MHz ,可以兼容 SPI 、 QSPI 、 DSP 接口和 Microwire 串口。輸出接到一個 …

IP地址/16或者/24的意義

IP地址/16或者/24的意義 2023-04-26 16:54 獵手家園 閱讀(533) 評論(0) 編輯 收藏 舉報 當創建VPC專有網絡時,許多人會遇到填寫IPv4地址的情況,通常使用的格式是xxx.xxx.xxx.xxx/16或者xxx.xxx.xxx.xxx/24。那么這個斜杠后面的數字代表什么意思呢&#…

<習題集><LeetCode><鏈表><2/19/21/23/24>

目錄 2. 兩數相加 19. 刪除鏈表的倒數第 N 個結點 21. 合并兩個有序鏈表 23. 合并 K 個升序鏈表 24. 兩兩交換鏈表中的節點 2. 兩數相加 https://leetcode.cn/problems/add-two-numbers/ public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//head是cur鏈表頭節點…

pdf轉png的兩種方法

背景:pdf在一般公司,沒有辦公系統,又不是word/wps/Office系統,讀不出來,識別不了,只能將其轉化為圖片png,因此在小公司或者一般公司就需要pdf轉png的功能。本文將詳細展開。 1、fitz庫(也就是PyMuPDF) 直接pip安裝PyMuPDF即可使用,直接使用fitz操作,無需其他庫。 …

Go語言實現深度學習的正向傳播和反向傳播

文章目錄 開發前言開發理論圖解理論數據類型數學函數數據節點統一抽象變量數據節點常量數據節點單目運算封裝雙目運算封裝算子節點統一抽象基礎算子加法算子減法算子乘法算子除法算子指數算子對數算子正切算子正弦算子余弦算子數據流圖正向傳播反向傳播正向訓練反向訓練運行示例…

我的記事本

url uniform resource locator. 統一資源定位符 請求狀態碼 1XX:信息響應 2XX:成功響應 3XX:重定向消息 4XX:客戶端錯誤響應 5XX:服務器端錯誤響應 IP地址分類 本機回環IP地址:127.0.0.1 ~ 127.255.255.254 局域網IP(私網IP) 192.168.0.0 &am…

船舶機電設備振動數據采集監控系統解決方案

船舶運行中,通常需要通過振動數據采集系統對船舶的各個機電設備運行進行監控,有助于在設備故障時快速預警,進行診斷、分析和維護,保證船舶機電設備正常工作,從而確保工作人員及船舶的安全。 船舶各種機電設備會產生大…

vLLM介紹

簡介 vLLM 工程github地址 Paged attention論文地址 vLLM開發者介紹 Woosuk Kwon vLLM: A high-throughput and memory-efficient inference and serving engine for LLMs. SkyPilot: A framework for easily and cost effectively running machine learning workloads on …

【模型量化】神經網絡量化基礎及代碼學習總結

1 量化的介紹 量化是減少神經網絡計算時間和能耗的最有效的方法之一。在神經網絡量化中,權重和激活張量存儲在比訓練時通常使用的16-bit或32-bit更低的比特精度。當從32-bit降低到8-bit,存儲張量的內存開銷減少了4倍,矩陣乘法的計算成本則二…

ALNS算法中隨機化重要性的評價

文章概述 本研究分析了在海上提貨和交付問題中使用的ALNS元啟發式算法中的隨機化成分。研究者提出了簡單的確定性替代方案,并通過實驗比較了隨機化和確定性成分的性能。結果表明,初始實現的簡單確定性替代方案能夠與隨機化成分的性能相匹配。這項研究為…

IDEA使用git從遠程倉庫獲取項目

將地址填入url中 然后直接clone就行

《Easy3d+Qt+VTK》學習

《Easy3dQtVTK》學習-1、編譯與配置 一、編譯二、配置注 一、編譯 1、 資源下載:easy3d giuhub 2、解壓縮 3、用qt打開CMakeLists.txt即可 4、點擊項目,選擇debug或者release,圖中3處可自行選擇,因為我的qt版本是6&#xff0c…

Java集合大總結——Collections工具類

簡單闡述 參考操作數組的工具類:Arrays,Collections 是一個操作 Set、List 和 Map 等集合的工具類。 常用方法 Collections 中提供了一系列靜態的方法對集合元素進行排序、查詢和修改等操作,還提供了對集合對象設置不可變、對集合對象實現…

jdbc4.MySQLSyntaxErrorException: Query was empty

出現這種異常的原因,有幾個要點 檢查sql語句是否正確檢查你的條件是否真的被sql使用 背景 delete sql在xml中,賦值list對象,計劃進行批量刪除的sql,這時出現了異常,檢查后,發現這個list竟然是空&#xff…

Linux下的軟硬鏈接

Linux下的軟硬鏈接 Linux下的硬鏈接和軟鏈接是一種文件系統級別的鏈接方式,它們允許你在不同的目錄中創建指向同一個文件的引用。硬鏈接和軟鏈接的主要區別在于它們的實現方式和刪除方式。 硬鏈接(Hard Link): 硬鏈接是指向同一…

在linux上如何運用虛擬數據優化器VDO

本章主要介紹虛擬化數據優化器。 什么是虛擬數據優化器VDO 創建VDO設備以節約硬盤空間 16.1 了解什么是VDO VDO全稱是Virtual Data Optimize(虛擬數據優化),主要是為了節省硬盤空間。 現在假設有兩個文件file1和 file2,大小都是10G。file…

cpu 300% 爆滿 內存占用不高 排查

top查詢 cpu最高的PID ps -ef | grep PID 查看具體哪一個jar服務 jstack -l PID > ./jstack.log 下載/打印進程的線程棧信息 可以加信息簡單分析 或進一步 查看堆內存使用情況 jmap -heap Java進程id jstack.log 信息示例 Full thread dump Java HotSpot(TM) 64-Bit Se…

橫向擴展統一存儲與備份服務器功能

Infortrend 更新了GS,GSe,GSe Pro統一存儲系列的備份服務器功能。該功能降低數據備份成本,并提供靈活的備份策略。通過備份服務器功能,用戶可以通過多種途徑實現數據備份,包括公有云(兼容S3)、文…

為內核新增字符驅動模塊

1. 放置代碼 在./source/driver/char下放置模塊文件夾 2. Makefile和Kconfig makefile文件參考 obj-$(AAA_LED) AAA-led.oKconfig文件參考 config AAA_LEDtristate "Phytium macb led control module"depends on XXXdefault mhelpIf you have a n…

C/C++,樹算法——二叉樹的插入(Insert)算法之源程序

1 文本格式 #include<iostream> using namespace std; // A BTree node class BTreeNode { int* keys; // An array of keys int t; // Minimum degree (defines the range for number of keys) BTreeNode** C; // An array of child pointers int …