跳至主要內容
YIP NEWS
生活 美食生活

三十萬顆高麗菜都要登記蓋章的廚房,是怎麼重新開火的

一篇前端工程師把百萬行資料的載入時間從二十七秒砍下來的技術文,被我們翻譯成一間備料過度、每顆菜都被登記三次的廚房,與爐臺動線重新安排後的那頓飯。

YIP NEWS 編輯室 閱讀約 6 分鐘

2026 年 9 月 10 日,掘金上出現了一篇很硬的文章,標題是「百萬行資料透視表,我是怎麼把 Vue 回應式開銷砍到零的」。一位工程師面對的狀況是這樣:後端一次把三十萬到一百萬行資料倒進瀏覽器,頁面載入要二十七秒,切換維度時整個畫面凍住,拖一下欄位就掉幀。他把整條資料流拆開檢查,發現其中一段「回應式系統」喫掉了好幾秒,原因聽起來非常樸素:三十萬行資料,每一行都被套上了一層代理物件,等於三十萬個代理人站在資料前面,每次有人要讀一筆數字,都得先經過這個代理人掛號、登記、再轉手。

這件事跟我們的廚房有什麼關係?關係比你想的近。

一間每顆菜都要蓋章的中央廚房

你大概見過那種把家裡弄得像中央廚房的人。買回來的高麗菜,先剝外葉、洗淨、瀝乾,然後裝進保鮮盒,貼上標籤,寫清楚品名、購買日期、預計料理方式,再放進冰箱。紅蘿蔔也一樣,青椒也一樣,一顆蛋都要登記。聽起來很有效率,對吧?什麼都一目瞭然。

問題出在規模。如果你今天要辦一桌二十人的辦桌菜,買了三十萬顆高麗菜,而你的流程是每一顆都拆開、洗過、貼標籤、建檔,那光「建檔」這件事就要做到天荒地老。菜還沒下鍋,你已經累死在標籤機前面。

那篇技術文裡的工程師遇到的,就是這種處境。Vue 這套前端框架的「回應式系統」,本意是貼心的:它把資料包起來,隨時監看,資料一變動,畫面就自動更新。你改一筆數字,螢幕上的表格自己跟著變,多好。但貼心的代價是,它要替每一筆資料派一個監看員。三十萬行、每行十七個欄位,就是三十萬個監看員同時上工。資料還沒顯示出來,系統已經先花好幾秒在做人事登記。

更糟的是第二層。表格元件每隔一陣子要「深度巡檢」一次,把三十萬行從頭到尾走一遍,看看有沒有哪裡變了。這就像你每十分鐘就把冰箱整個清點一次,三十萬顆高麗菜一顆一顆摸過去,確認標籤沒掉、數量沒少。飯還沒煮,人先虛脫。

為什麼摸一下會變慢:按門牌找,跟拿名冊逐個問

文章裡有一段講得很有畫面感。他說,瀏覽器引擎處理普通物件的方式,像是按門牌號碼找房間。這個物件有哪些屬性、每個屬性放在記憶體哪個位置,引擎都登記在一張「隱藏類別」的圖紙上,找的時候直接照圖紙去拿,快得像伸手進自己家的抽屜。

但被代理物件包住之後,路徑變了。你要讀一筆數字,得先敲代理人的門,代理人翻出自己的工作手冊,確認要記錄這次存取,然後才轉身去把真正的數字拿給你。原本三步的事變成五步,而且這五步一步都省不掉,因為代理人手冊裡可能寫著任何邏輯,引擎不敢預先假設、不敢抄捷徑。

廚房裡的對照是這樣的。你自己家的鹽罐就放在爐臺右手邊,手一伸、勺一舀,眼睛都不用看。可是如果這罐鹽歸總務管理,你每次要用鹽,都得先填申請單、等簽核、由專人遞給你、用完再歸還登記,那這鍋湯永遠煮不滾。一個人開夥的時候申請單還好應付,一旦辦起百人辦桌,每放一撮鹽都要走流程,整個廚房就停擺在文書作業上。

這讓我想起我們寫過的AI 在鍋裡炒了一個多小時的那盤菜。把廚房整個交出去、沒人試味道的料理,跟把每顆菜都交給監看員管理的系統,卡住的地方很像:真正該花時間的火候沒人管,時間全花在流程上。

工程師的解法,跟阿嬤的解法是同一個

那位工程師最後做的事,說穿了很家常:他把不該登記的東西,退回成不登記的。三十萬行的原始資料,改用最樸素的「不可變資料」形式存放,就是一個普通的物件陣列,沒有代理人、沒有監看員、沒有申請單。引擎可以按門牌直接讀。需要畫面更新的時候,再由工程師自己決定,在哪個明確的時間點、把哪一塊明確的結果交給表格。監看從「每顆菜隨時被盯著」變成「菜端上桌那一刻才驗收」。

載入時間從二十七秒大幅縮短,切換維度不再卡死。他把功勞說得很老實:沒有魔術,每一項優化都對應砍掉一筆具體的開銷。

阿嬤的廚房一直就是這樣運作的。她不會替每根蔥建檔。蔥買回來,一把插進水瓶,要用的時候抽一根,切了,下鍋。真正需要記的只有幾件事:冰箱裡那鍋高湯是哪天熬的、醬油快用完了、魚要在飯好前十分鐘才下鍋。監看的範圍小,火力就全留在菜上。辦桌的日子她也一樣,前一天把該切的切完、該滷的滷好,開席當天只管順手拿、順手下鍋,動線裡沒有一個環節在等簽核。

備料這件事,重點從來不是「全都處理好」,而是分清楚什麼該先處理、什麼留到最後一刻才碰。生菜沙拉的醬汁,上桌前才淋;炒飯的蛋,鍋熱了才打。太早做完的東西會涼、會出水、會失去它該有的樣子,這跟資料太早被層層包裝會拖慢整條路,是同一個道理。我們之前聊冰箱容量與一個家的滋味容量時提過類似的事:空間怎麼分配,決定了今晚能變出什麼菜;而今天這則新聞說的是,注意力怎麼分配,決定了這頓飯幾點開動。

收在自家爐臺上

你家的廚房大概不需要處理三十萬行資料,但多半有過這種經驗:想認真做一頓飯,結果前置作業弄得太隆重,食譜抄了三頁、每樣材料都量好秤好拍照存證,等真正開火時人已經累了,菜也失去了那個隨興的勁。

下次備料,不妨學學那位工程師的思路,先問一句:這一步,真的需要在這個時候做嗎?能用一個動作解決的,不要拆成五個。該盯的火候盯緊,其他的事,讓它安安靜靜躺在砧板上,等輪到它的時候再說。

二十七秒的卡頓是這樣縮短的,一頓遲到的晚餐,也是這樣救回來的。