全程原生,直到你需要處理文字:原生 UI 的隱藏成本

全程原生,直到你需要處理文字:原生 UI 的隱藏成本

在過去近二十年裡,Apple 生態系統中的主流觀念一直是「全程原生」。這個承諾很簡單:透過使用 SwiftUI、AppKit 和 TextKit,你可以獲得無與倫比的效能、深度的 OS 整合,以及精緻的使用者體驗。但對於許多開發者來說,一旦他們嘗試構建一個現代、以文字為核心的介面——特別是具有 Markdown 支援的聊天應用程式時,這個承諾就撞牆了。

在最近一篇具挑釁性的文章中,資深 macOS/iOS 開發者 Artem Loenko 描述了在嘗試實現一個簡單的聊天介面時,如何陷入「開發地獄」。他的經驗凸顯了現代軟體工程中日益增長的緊張關係:原生框架的感知效率與實現複雜文字渲染的實際生產力成本之間的差距。

原生開發的掙扎:從 SwiftUI 到 TextKit

Loenko 的旅程始於 SwiftUI,這個現代的宣告式框架。雖然它能夠處理簡單的畫面,但他發現它在處理豐富文字互動方面根本力不從心。主要的轉折點在於一個基本的用戶需求:能夠選擇一個由 SwiftUI 原生組件構建的整個 Markdown 文件。就其設計而言,這幾乎是不可能的。

為了尋求更穩健的解決方案,他在 Apple SDK 層級中不斷嘗試,每一步都帶來了生產力上的權衡,感覺就像是在退步:

  • NSTextView & TextKit 2: 雖然提供了更好的文字控制,但它使專案與已經在 SwiftUI 中完成的效能與測試工作脫節。
  • AppKit & NSCollectionView: 一種經過實戰檢驗的方法,但深受「單元格閃爍」之苦,而這似乎是設計使然,無法避免。
  • Pure TextKit 2: 一種低階的原型,提供了可接受的效能,但在串流文字(streaming text)方面表現慘不忍睹——這是現代 AI 驅動的聊天應用程式不可或缺的要求。

Loenko 得出結論,若要達到與基本 macOS 行為一致的功能(如右鍵選單、字典查詢和輔助功能),將需要數月的勞動。這就是「黑暗面」變得具有吸引力的地方:Electron。

「Electron 悖論」

當 Loenko 最終轉向 Electron 時,他發現文字操作、Markdown 渲染和排版功能開箱即用,且效能足以與他的純 TextKit 2 實作版本相媲美甚至超越。

這造成了一個悖論。開發者經常嘲笑 Electron 因為「臃腫」或「慢」而受到詬病,然而對於豐富文字而言,瀏覽器引擎(Blink/WebKit)通常是機器上經過最優化的軟體組件。

正如一位評論者 @pornel 所言:

"瀏覽器渲染引擎在目前這個階段已經非常成熟,擁有顯著的 GPU 加速,並且經過了十多年來臃腫的 Web App 的壓力測試。與此同時,SwiftUI 並不覺得特別快。"

社群討論:技術問題還是系統性失敗?

圍繞這段經驗的討論呈現兩極分化。一些開發者認為這是一個「技術問題」,指出現有的原生庫或他們自己在 TextKit 上的成功經驗。

  • 擁護原生派: 一些用戶,如 @lenkite 和 @msephton,認為 SwiftUI 已經存在成熟的 Markdown 渲染器,或者如果實作正確,TextKit 2 可以具有極高的效能。@msephton 引用了他們自己構建的一個文字編輯器,可以在 150ms 內處理 20 次快速按鍵輸入並完成完整的重新排版。
  • 系統性失敗派: 其他人則同意 Loenko 的觀點,認為要讓原生文字「正常運作」所需的巨大努力是令人望而卻步的。@splittydev 呼應了這一點,表示在嘗試了五個流行的 GitHub 組件(針對 UIKit/SwiftUI)後,所有組件都「以某種方式出錯、有 Bug 且速度慢」。

中間道路:混合渲染

在討論中,一個反覆出現的建議是混合方法:使用原生框架來構建應用程式外殼(選單、工具列、導航),並專門為豐富文字內容使用 WKWebView

這種方法承認了 HTML/CSS 是 GUI 文字渲染最強大的系統。正如 @iamcalledrob 所指出的,這這並不是一個新發現;macOS 的早期版本和原始 iPhone 的 UITextField 實際上都是由 WebKit 驅動的,因為「文字處理很難」。

結論:選擇正確的工具

爭論的點不在於原生開發是否「可以」做到,但於在對於文字密集型應用程式而言,它「是否應該」作為預設選擇。對於高效能、專業化工具——例如數位音訊工作站 (DAWs) 或 3D 建模軟體——原生開發是不可或缺的。但對於現代「聊天密集型」的軟體的時代,與原生框架抗爭的成本可能超過了其帶來的效益。

正如社群共識所建議的,瀏覽器引擎不僅僅是一種構建เว็บไซต์的工具;它是現存最受資金支持且經過最優化的文字渲染引擎。當目標是靈活的排版與無縫的 Markdown 串流時,有時最具有「原生感」的使用者體驗,反而是建立在 Web 技術棧之上。

Sources