許多工程師在開發跨平台桌面應用時,第一個想到的工具通常是 Electron。Electron 的核心邏輯是將整個 Chromium 瀏覽器與 Node.js 執行環境直接打包進應用程式中。雖然這讓前端工程師可以用熟悉的 Web 技術快速開發,且能確保在所有平台上的顯示效果完全一致,但代價是極高的記憶體消耗與龐大的安裝檔體積。
為了打破這個僵局,Vercel Labs 推出了開源框架 Zero-Native。這是一個旨在取代 Electron 的輕量化方案,其核心目標是在維持 Web 前端開發體驗的同時,大幅降低系統資源的開銷。
捨棄內建瀏覽器,改用原生 WebView
Zero-Native 與 Electron 最本質的區別在於它不再隨應用程式攜帶一個完整的瀏覽器 runtime。它採取的是利用作業系統內建的 WebView(原生網頁視圖)來渲染介面。WebView 是 OS 提供的輕量級瀏覽器元件,讓應用程式能以 Web 頁面的形式呈現 UI,而不需要額外安裝 Chromium。
這種做法能顯著縮小執行檔體積並降低記憶體占用。不過,這也帶來了一個工程上的挑戰:由於不同作業系統(如 macOS 與 Linux)內建的 WebView 版本與渲染引擎可能有所不同,開發者必須面對潛在的相容性問題。為了提供靈活性,Zero-Native 仍允許開發者透過設定檔選擇打包 Chromium Embedded Framework (CEF),作為一種確保一致性的後備方案。
為什麼選擇 Zig 作為後端語言
Zero-Native 的後端採用了 Zig 語言,這是一個相對較新且高效的系統編程語言。對於習慣使用 Rust 或 C++ 的工程師來說,Zig 的引入主要解決了兩個痛點。
首先是編譯速度。在迭代開發過程中,編譯時間直接影響開發者的回饋循環(Feedback Loop)。許多從 Rust 轉向 Zig 的開發者提到,Zig 的增量編譯速度極快,能讓開發過程更接近 Web 開發中熱更新(Hot-reloading)的流暢感,避免了等待數秒才能執行單一測試的挫折感。
其次是與 C 語言的無縫接軌。Zig 能直接與 C 語言的應用程式二進位介面(ABI, Application Binary Interface)交互。這意味著開發者不需要撰寫複雜的外部函數介面(FFI, Foreign Function Interface)綁定,就能直接呼叫系統底層的 SDK 或音訊編解碼器等 C 語言函式庫。這不僅簡化了建置流程,也進一步提升了執行效率。
安全機制與權限管理
在權限控制上,Zero-Native 採取了類似 Deno 或 Tauri 的能力導向安全系統(Capability-based system)。
在傳統的 Electron 應用中,如果後端權限過大,前端 JavaScript 可能會在不經意間觸發危險的系統操作。而 Zero-Native 限制了前端直接存取本地檔案或呼叫原生 API 的能力。開發者必須在 Zig 後端明確定義哪些命令可以被呼叫,並在 app.zon 設定檔中顯式授予對應的權限。這種設計將攻擊面最小化,確保了原生功能的調用受到嚴格管控。
跨平台生態的競爭與限制
目前跨平台桌面框架正處於激烈的競爭期。除了 Electron,市面上已有 Tauri(使用 Rust 後端 + 原生 WebView)以及 LynxJS(將 Web 標記編譯為原生 UI 原語)等方案。Zero-Native 的定位是為那些追求極致輕量、且希望擁有快速編譯體驗的團隊提供選擇。
然而,Zero-Native 目前仍處於實驗階段。它目前主要支援 macOS 與 Linux 桌面端,Windows 以及行動裝置的支援仍在開發中。對於準備採用的工程師來說,需要衡量的是在追求輕量化的同時,是否能接受原生 WebView 帶來的一致性風險。
來源:infoq.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。