Viem vs. Ethers.js:Web3 開發者詳細比較

本文探討在以太坊上建構 dapp 時,Ethers.js 與 Viem 之間的差異、優勢與取捨。

4 分鐘閱讀
Viem vs. Ethers.js:Web3 開發者詳細比較

在 Ethereum 上開發 dapp 時,選擇合適的函式庫將對您的開發流程與專案成敗產生重大影響。目前在這個領域中,Ethers.js 與 Viem 是兩個備受矚目的函式庫。兩者都提供了一套強大的工具,可用於連接智能合約、發送交易,以及查詢區塊鏈資料,並正式支援 TypeScript。這兩個函式庫也都採用模組化設計,允許選擇性地引入函式庫的特定部分,以優化打包大小與應用程式效能。

在這篇部落格文章中,我們將深入探討這兩個函式庫,重點說明它們的主要差異、優勢與取捨,以及各自適合使用的時機。讀完之後,您將掌握所有必要資訊,以便在開始下一個專案時做出明智的選擇。

Ethers.js 與 Viem 的核心差異

雖然兩者目標相同,但 Ethers.js 與 Viem 在設計方式與功能特性上存在顯著差異,分別迎合不同的開發者偏好與專案需求。

Ethers.js

  • Ethers.js 中的 Provider: Ethers.js 使用 provider 作為連接 Ethereum 網路的橋樑。這些 provider 是多功能的物件,開發者可透過它們讀取區塊鏈資料或發送交易。Ethers.js 透過多種 provider 類型(包括預設、JSON-RPC 及 Infura provider)簡化了連接各種 Ethereum 節點的流程。這層抽象化讓開發者能更專注於 dapp 的功能本身,而非網路連接的複雜細節。

  • 成熟度與穩定性:Ethers.js 擁有悠久的歷史與強大的支援社群,是複雜專案的可靠選擇。憑藉完整的功能集,它提供了廣泛的功能性,非常適合尋求 Ethereum 互動一站式解決方案的開發者。儘管功能全面,Ethers.js 仍維持模組化設計,讓開發者能自由選用所需的特定功能。

Viem

  • Viem 的 Action: Viem 引入了 action 的概念——專門用於在 Ethereum 網路上執行特定任務的函式。這些 action 可分為公開 action(如查詢交易)與錢包 action(如發送交易)。Viem 的 action 專為可組合性與模組化而設計,讓開發者能以更清晰、更有效率的方式建構 Ethereum 應用程式。

  • 效率與極簡主義:Viem 專注於極簡設計,以較小的打包大小與選擇性的任務執行來優化效率。它透過 API 強調模組化與可組合性,實現更精簡、更高效的開發流程。憑藉創新的設計理念,Viem 致力於打造直觀的 API 設計,以清晰度與易用性為優先,提升開發者體驗。

如何在 Ethers.js 與 Viem 之間做選擇

選擇 Ethers.js 還是 Viem,取決於您的專案具體需求以及您身為開發者的個人偏好。

  • Ethers.js 最適合需要完整功能集、並重視成熟度與社群支援的專案。它非常適合需要與 Ethereum 網路進行大量互動的複雜 dapp。

  • Viem 是效率、輕量打包與極簡設計為關鍵考量的專案首選。它在注重速度與效能的網頁應用程式中表現出色,也適合偏好模組化與創新方式進行 Ethereum 互動的開發者。

Ethers.js 與 Viem 的優勢與取捨

Ethers.js

優勢:

  • 功能範圍廣泛,社群支援強大。

  • 憑藉其成熟度,具備高度的穩定性與可靠性。

取捨:

  • 對於不需要其完整功能集的專案而言,可能顯得過於龐大。

  • 管理相依套件與外部 provider 可能增加複雜度。

Viem

優勢:

  • 高效且輕量,非常適合對效能敏感的應用程式。

  • 透過模組化設計與清晰的文件,簡化開發流程。

取捨:

  • 成熟度不及 Ethers.js,社群規模較小,相關資源也較少。

  • 由於其無主見(unopinionated)的模組化特性,管理上可能需要投入更多心力。

Ethers.js 與 Viem 的技術差異

以下是 Ethers.js 與 Viem 的增強版比較表,包含程式碼範例與各項功能的簡要說明。此比較重點呈現了兩個函式庫在處理 Ethereum 區塊鏈互動時,結構與概念上的差異。

其他注意事項

術語與概念清晰度: 「provider」一詞在 Web3 開發中被廣泛使用,但由於其含義過於多元,往往容易造成混淆。Viem 透過採用「Client」一詞來解決這個問題,並將其分類為:Public Client(用於存取區塊鏈資訊)、Wallet Client(用於簽署交易)以及 Test Client(用於本地節點測試)。這種區分有助於開發者更清楚地掌握 Ethereum 互動的全貌。

打包大小與效率: Viem 採用極簡模組化架構設計,打包大小僅 35kB。這與 Ethers.js 形成鮮明對比——由於 Ethers.js 內建了更廣泛的功能,其打包大小較大,對網頁應用程式效能的影響也相對更為顯著。

API 設計與開發體驗: Viem 選擇採用詳盡的 API,優先考量靈活性與易於修改的特性。這與 Ethers.js 的做法形成對比——Ethers.js 在某些功能上可能採用更高度抽象化的 API,這有時會使程式碼的修改或擴展變得較為困難。此外,Viem 充分運用 TypeScript,提供強型別 API,透過自動補全、型別推斷與靜態驗證等功能提升開發體驗,降低執行時期錯誤的發生機率,並使 API 更加直觀易用。

結論

每個函式庫都提供了與 Ethereum 區塊鏈互動的獨特方式。Ethers.js 傾向於透過預定義的類別與方法來抽象化複雜性,追求物件導向的開發體驗。相較之下,Viem 選擇以函式驅動的介面為主,強調明確性,在某些情境下雖然學習曲線略為陡峭,但提供了更大的靈活性。

Ethers.js 面向尋求複雜 dApp 完整工具組的開發者,提供豐富的抽象化功能與完整的功能集。另一方面,Viem 則服務於重視效率、模組化與極簡設計的開發者,為 Ethereum 開發提供精簡且創新的方式。兩者之間的選擇,最終取決於開發者或專案的具體需求與偏好。

AI 翻譯。可能包含錯誤。請務必核實資訊。

評價此翻譯