AI 寫碼時代,選框架終於有數據了:同一個 App 做十二遍

Nolan Lawson 把同一個寶可夢應用用 12 種 JS 框架各做五遍:MPA 便宜又快,Angular 最貴最慢。全文翻譯+HN 227 則討論整理+圖表懶人包。

Nolan Lawson(勞森,效能工程師)把同一個寶可夢應用,用 12 種 JavaScript 框架各做五遍,比建置成本、速度、程式碼量與 Lighthouse 分數。結論是多頁應用便宜又快,Angular 成本最高、速度最慢——但 227 則 Hacker News 留言吵的是另一件事:題目太小,這結論能外推嗎?以下為原文全文翻譯,後附網友討論整理與圖表懶人包。

原文翻譯

我對網頁開發社群有個小小的不滿:我們做的太多決定都是憑感覺。框架「快得嚇人」,工具會「大幅加速」開發,選對抽象層就開發體驗跟使用者體驗一次滿足。這類吹捧通常零證據。阿萊克斯·羅素(Alex Russell)稱之為「前端失落的十年」,巴爾德·比亞納森(Baldur Bjarnason)說寫程式是種流行文化,而我一直在部落格裡用事實跟基準測試對抗這股風氣。

長久以來,社群之所以對證據過敏,似乎是想要更好的開發體驗:開發者只是喜歡在 React 打 JSX 的感覺,「虛擬 DOM 很快」這類論點多半是事後合理化。(強納森·海特(Jonathan Haidt)大概也會同意。)

但在 AI 代理時代,開發者不再親手打碼、比較不受開發體驗綁架,感覺治國卻依然當道。前端被重寫只因某框架「對代理比較友善」(有人問過代理本人嗎?),生出來的碼「比較快」、代理「比較少犯錯」——同樣沒證據。每次讀到這種文章,我想的都是:「基準測試在哪?」

於是我自己寫了一個,結構很直白:用 PokéAPI 設計一個小而完整的寶可夢應用(列表、屬性、招式、搜尋篩選);指示代理用特定框架來做;用規格一致性測試套件驗收防作弊;評開發時間、token 花費、程式碼行數、Lighthouse 效能與無障礙分數。

前提先講:這只代表一種應用原型——內容型、低互動,接近維基百科不像 Gmail;各框架都用官方 MCP 或技能;沒指定伺服器渲染或客戶端渲染,一律 Opus 5.5 高努力模式、沙盒執行,代理事先不知道會被測 Lighthouse;CSS 只禁 Tailwind、Bootstrap;一致性測試走無障礙樹而非原始 DOM。而且一切都很隨機——大型語言模型是隨機文字產生器,LCP 每次判定的最大元素都可能不同;解法是每框架做五遍取中位數,並誠實揭露變異。

成本(每次執行,美元)

框架 成本 框架 成本
Hono+htmx 2.67 SolidStart 3.79
Astro 2.76 React Router 3.81
Nuxt 2.82 SvelteKit 4.28
Vanilla 2.98 Gracile+Lit 4.65
Next.js 3.14 Angular 4.97
Qwik 3.27
TanStack Start 3.54

SvelteKit、Gracile+Lit、Angular 明顯較貴:SvelteKit 太新(v3 遷移指南每次都被讀)、Gracile 代理不熟(去 clone 整個 repo)、Angular 程式碼量最大。MCP 使用率落差極大(Hono、React Router、Svelte 每次都用;Nuxt 從沒被用過)——作者認為這反而貼近真實的氛圍寫碼現場。Vanilla(Vite+無框架)輸給好幾個框架,證明有框架比沒框架好。時間與 token 跟成本一致:Astro 最快(8.2 分鐘)、Angular 最慢(17.2 分鐘);token 最少 Nuxt(385 萬)、最多 Angular(976 萬)。

品質(Lighthouse,只報首頁)

效能、無障礙、累積版面位移幾乎全員封頂,真正的差距在:JS 傳輸量(Astro 0 KiB、Vanilla 7、Gracile+Lit 8、Hono+htmx 18、SvelteKit 36、Qwik 與 SolidStart 40、Nuxt 84、Angular 93、React Router 115、TanStack Start 118、Next.js 142);總阻塞時間(MPA 群多為 0 毫秒,Next.js 71 毫秒、Angular 103 毫秒);最大內容繪製(Astro 810 毫秒、Hono 978、Qwik 979,對比 Next.js 2090、TanStack 2028、Angular 1954)——大致是 JS 包體積的函數,Qwik 是擠進 MPA 群的例外。Angular 兩次失敗是因代理做了拒絕非本地連線的伺服器渲染應用,判規格失敗不重跑。

可維護性(程式碼行數)

Hono+htmx 1370、Nuxt 1415、Astro 1461、Vanilla 1492、Next.js 1539、React Router 1564、SvelteKit 1611、SolidStart 1630、TanStack Start 1697、Gracile+Lit 1717、Qwik 1744、Angular 2009。作者引瑞奇·哈里斯(Rich Harris,Svelte 作者)「框架是組織心智的工具」:代理時代程式碼量等於未來每次修改的 token,也就是字面維護成本。

作者結論

重點不是終極選型答案,而是證明 AI 時代選型仍可憑證據。測試本身多半是氛圍寫出來的,MPA 佔了 Lighthouse 便宜,現在的 MCP 可能弊大於利,全套開源歡迎刷榜。收尾三問:你選技術棧真是看證據,還是用你本來就會的?已放手讓代理寫碼的話,當年一行行打字時做的選擇還有什麼羈絆?連造軟體的方式都在重估,安裝指令後面打什麼不值得重估?

HN 網友討論整理

統計列:291 分、227 則留言、頂層 47 串,Firebase 全樹抓取,覆蓋百分之百。

方法論批判(分歧): 寶可夢應用太小太靜態,燈塔全員滿分等於沒測到真實體驗,不能外推高互動專案。「選框架很少只看速度,還要算領域知識、長期可維護性與安全紀錄。」(neya)辯護方:「作者示範的是憑證據而非感覺做決策,批評正好拿去做更好的測試。」(shermantanktop)

AI 時代還要框架嗎(主流): 一方說框架只是多餘樣板,伺服器端生成加少許 JS 就夠;另一方說框架價值在收斂做法、防呆、省脈絡。「純手寫只會讓代理每次都漂移一點。」(oatmealsnap)「React 能寫成純轉換,人跟模型都好推理。」(incrudible)

MPA 奪冠只是題目紅利(多數): 內容型考題天然利好 MPA,換高互動題目再比。htmx 實戰回報兩極:簡單情境便宜快速,複雜表單狀態代理會撞牆。「靠補足測試才讓代理誠實,HTMX 版反而比 React 更快,但真是場冒險。」(unsloppable)

自幹 vs 框架(多數): 自幹最終長成沒人維護的家用框架,成熟框架等於別家公司幫付維護費。「當我發現自家程式碼長成了只能由我維護的 Vue,我就換成 Vue 了。」(james_marks)

字串直寫效能戰(主流): torginus 主串主張多數單頁框架作者不懂瀏覽器引擎,字串直寫超文本才是正道;反方以安全漏洞與事件處理惡夢反駁。

Angular 論戰(分歧): 有人拿數據判死刑,有人說小題目本來就不該用它。「我開接案公司時 Angular 有用,僵化反而降低切換專案的認知負荷。」(alex_suzuki)

肯定證據派(少數): 「能多快、多少 token、多少行寫完都和我們在乎的事相關。」(socketcluster)「人類覺得好寫的框架,代理也覺得好寫。」(dzonga)

視覺懶人包

手機版可直接開懶人包直連:https://static.blog.derekhsu.net/ai-cost-js-frameworks-hn.html

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *