Electron 的新對手來了:有人把 React 捲進 GPU 了

GPUIX:React × GPU,Electron 新對手

“Electron might die soon.”

GPUIX 作者 Tommy D. Rossi 丟出這句話時,後面跟著一個很有震撼力的展示:一款用 React 和 TypeScript 寫成的聊天應用,一口氣塞進 5000 則訊息,沒有 Electron,也沒有 WebView,整個介面交給 GPU 繪製。

GPUIX 作者展示 5000 則訊息渲染效果

這句話擺明是衝著話題性來的,但專案本身不是一張概念圖。GPUIX 已經釋出 @gpuix/react 和 @gpuix/native 兩個 npm 套件,截圖當下在 GitHub 拿到約 1.1k Star,最新版本為 0.4.0。

GPUIX GitHub 儲存庫與專案資料

前端開發者最熟悉的 React,這次沒有把元件變成 DOM,而是把介面交給 Zed 編輯器背後的 GPU UI 框架。

這條路如果走得通,Electron 真的會多一個麻煩的對手。

React 這次不渲染網頁了

React 並不只屬於瀏覽器。

我們平常寫下 <div>、useState 和 onClick,最後看到網頁,是因為 React DOM 把元件變化翻譯成瀏覽器能理解的 DOM 操作。React Native 能用同一套元件思維開發行動應用,也是因為它換了一個渲染目標。

GPUIX 做的是同一類事情。它實作了一套 React 自訂渲染器,把 React 產生的介面變更傳送給 Rust:

GPUIX 從 React 元件到 GPU 繪製的技術架構

元件新增時,React 發出 createElement、appendChild;樣式變化時,傳送 setStyle;文字變化時,傳送 setText。Rust 端維護一棵長期存在的元素樹,GPUI 每幀根據它建構暫時元素、計算版面,再把像素畫到螢幕上。

只有發生變化的元素需要跨越 JavaScript 與 Rust 的邊界,不必每次把完整元件樹序列化一遍。

這就是 GPUIX 最聰明的地方:開發者繼續寫 React,應用程式執行時卻不再背著一套瀏覽器。

Node.js 和 Bun 到底幹了什麼

React 和 Node.js 仍然執行在 CPU 上。

React 負責元件狀態、Hooks 和差異比對;Bun 或 Node.js 負責執行 JavaScript;Rust 承接介面樹、視窗和原生能力;真正呼叫 GPU 繪製的是 GPUI。

桌面端透過 napi-rs 把兩邊接起來。專案範例主要用 Bun 啟動,但底層提供的是 Node.js N-API 原生模組,建置需求中也列出了 Node.js 18+。

一個最小應用依然是熟悉的 React 寫法:

import React, { useState } from "react"

import { render } from "@gpuix/react"

function App() {

  const [count, setCount] = useState(0)

  return (

    <div onClick={() => setCount(count + 1)}>

      Count: {count}

    </div>

  )

}

render(<App />, {

  title: "My App",

  width: 800,

  height: 600,

})

看起來像網頁,執行後卻是一個原生視窗。沒有 HTML 檔案,沒有瀏覽器 DOM,也沒有 BrowserWindow。

它甚至支援用 bun --hot 開發。儲存 TSX 檔案後,React 會重新掛載到原本的視窗,GPU 裝置、原生視窗和捲動物理效果都繼續保留。不過這還不是完整的 React Fast Refresh,元件狀態與焦點會重置。

Electron 為什麼又被拉出來「宣判死刑」

Electron 的優勢和包袱來自同一個選擇:把 Chromium 和 Node.js 一起裝進應用程式。

這個選擇給了開發者完整的 Web 平台。HTML、CSS、Canvas、瀏覽器 API、DevTools 和龐大的前端元件生態都能直接使用,macOS、Windows、Linux 的表現也容易保持一致。

代價則是每個應用程式都要帶上一套瀏覽器執行環境。行程更多、安裝檔更大、記憶體開銷更高,也成了開發者反覆吐槽 Electron 的原因。

GPUIX 直接拆掉了中間這層 Chromium:

Electron:React → DOM → Chromium → GPU

GPUIX:React → Rust 介面樹 → GPUI → GPU

鏈路變短,不代表所有應用程式都會自動變快。Chromium 本來就會使用 GPU 做柵格化、合成與動畫,Electron 從來不是「只用 CPU 畫介面」。GPUIX 的變化,是不再為完整 Web 平台付費,只保留桌面應用需要的介面能力。

對於程式碼編輯器、終端機、AI 聊天客戶端、Markdown 閱讀器和 Diff Viewer,這個取捨很有吸引力。這些應用需要高效能文字、長列表、捲動和鍵盤輸入,卻未必需要一整套網頁引擎。

5000 則訊息,能說明什麼

示範中的聊天介面包含 Markdown、程式碼高亮、表格和虛擬化 Diff,捲動時仍能維持很高的幀率。GPUIX 還提供 <virtual-list>,只建構視口附近的行,適合訊息記錄和長列表。

動畫也沒有讓 React 每一幀都參與。React 只傳送一次目標值,後續插值由 Rust 完成,直到動畫結束。這樣能減少頻繁跨越 N-API 邊界產生的開銷。

這些設計都對準了真實的桌面效能問題。

但「5000 則訊息」不能直接翻譯成「效能碾壓 Electron」。虛擬列表的目的本來就是避免同時佈局和繪製全部內容;專案提供了自己的幀耗時迴歸測試,卻沒有公布同一台裝置、同一套介面、同一份資料下與 Electron 的完整對比。

這段示範證明 GPUIX 已經能做出複雜且流暢的介面,暫時證明不了 Electron 應該退休。

真正的問題不是效能,而是生態

GPUIX 現在只有 0.4.0,底層 GPUI 也處在 pre-1.0 階段。Zed 官方明確提醒,GPUI 仍在快速開發,版本之間會頻繁出現破壞性變更。

現階段的限制也很具體:

• 只能使用 GPUIX 已實作的元素和樣式,不是完整的 HTML 與 CSS。

• Ant Design、MUI 和大量瀏覽器元件不能原樣搬進來。

• 巢狀捲動暫不支援,複雜互動仍有不少邊角需要補齊。

• 瀏覽器 WebGPU 版本尚未接通事件回呼。

• Windows 版本仍待執行時期驗證。

• 從原始碼建置需要 Rust,macOS 還要準備 Metal 工具鏈。

• 專案依賴固定版本的 Zed/GPUI fork,底層升級成本還沒有經過長期檢驗。

這也是 Electron 短期內不會「死」的原因。Electron 的價值不只有渲染效能,還有跨平台一致性、安全模型、偵錯工具、無障礙支援、第三方元件和多年累積的工程經驗。

GPUIX 目前更像一台剛點火的賽車。速度看起來很猛,但輪胎、維修站和整條賽道都還在建設。

我的判斷是,GPUIX 最有價值的地方,不是又喊了一次「Electron 已死」,而是讓前端開發者看到了第三條桌面路線。

以前想繼續寫 React,通常就得接受 Chromium 或系統 WebView。現在 React 可以保留,DOM 和瀏覽器卻不再是必選項。JavaScript 負責開發體驗,Rust 負責原生能力,GPU 框架負責把介面畫出來。

Electron 今天當然不會死。

但下一個 Zed、終端機或 AI 客戶端,未必還會從 new BrowserWindow() 開始。

相關文章推薦

分享網址
AINews·AI 新聞聚合平台
© 2026 AINews. All rights reserved.