iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0
Modern Web

Vue 演進驗證 × AI Coding 時代的工程實踐系列 第 4

Day 4:別急著比較 Vue,先讓實驗公平

  • 分享至 

  • xImage
  •  
如果比較方式不公平,Scenario 再漂亮也沒有意義

昨天,我們把大型 Vue 專案的痛點做成了六個 Scenario,但是現在有一個問題:如果 Vue 3.6 發布,我們直接升級 pnpm update vue,然後重新跑一次,然後看到以下數據開心的說 Vue 3.6 比 Vue 3.5,你們接受嗎?

Version Vue 3.5 Vue 3.6
FPS 45 60

說真的,這個結論讓我很開心也有點心虛!

因為這兩次測試之間,會不會還有我們不知道的東西可以偷偷被改變?所以數字漂亮比 數據差異,真的來自 Vue 嗎? 重要,也才是今天要解決的問題。

                測試結果變快
                     │
        ┌────────────┼────────────┐
        ↓            ↓            ↓
      Vue 版本     Browser       測試資料
        │            │            │
      3.5 → 3.6   Chrome 更新    10K → 5K
        │
        └──── 還可能有 ────┐
                           ↓
                    操作流程 / OS

先不比較「版本」,只做固定「問題」


Vue Pain Lab 和一般 Benchmark 最大的差異是一般 Benchmark 會比大小比快慢,但是 Lab 主訴求是找原因!如果昨天建立的是 Reactive Chain Hell ,那今天應該問的是:

Vue 3.6,有沒有改善 Reactive Chain Hell?

Vue 3.5
   │
   │ 10000 operations
   ↓
  Result

VS

Vue 3.6
   │
   │ 10000 operations
   ↓
  Result

所以,我們採用 Controlled Experiment


化學實驗裡,有一個很基本的概念 一次只改變一個變因。

Vue Pain Lab 也一樣,如果我們要比較 Vue 3.5 與 Vue 3.6,那麼 Vue 版本就是唯一應該改變的東西,其他條件全部固定。

簡單來說,我們可以把整個實驗想成兩條完全平行的跑道。

                Reactive Chain Scenario
                         │
              ┌──────────┴──────────┐
              │                     │
           Vue 3.5               Vue 3.6
           Baseline              Experiment
              │                     │
              │                     │
        同一台電腦              同一台電腦
        同一 Browser            同一 Browser
        同一份資料              同一份資料
        同一操作                同一操作
              │                     │
              └──────────┬──────────┘
                         ↓
                  Compare Evidence

唯一不同的只有 Vue 版本,這才有機會把差異歸因到 Vue。

Vue 3.5  ←──────────────→  Vue 3.6
                  ↑
             Only variable

怎麼定義哪些東西不能動呢?


這時候我們把規則定下來。

Rule 1:環境固定

其實環境很重要,以前做任何實驗都會被要求記錄溫濕度,甚至當下心情,因為會影響結果的都要記錄,不然是好是壞原因很難找!

這次也是一樣,我們不要今天在 Windows 測 3.5,明天換 Mac 測 3.6,也不要偷偷換 Node、Vite 或 Browser,就是要固定!

Hardware
CPU / Memory

OS
Windows / macOS

Runtime
Node / Vite / TypeScript

Browser
Chrome + Version

環境一旦不同,測量結果就可能受到其他因素影響。

Rule 2:Scenario 固定

這可能是整個 Lab 最重要的一條,昨天我們已經把問題做成 Scenario,今天開始 Scenario 也不能為了讓新版 Vue 看起來更漂亮而修改。

例如:

reactive-chain

Vue 3.5
    │
    └── 同一份 Scenario

Vue 3.6
    │
    └── 同一份 Scenario

不能變成:

Vue 3.5
└── 1000 reactive dependencies

VS

Vue 3.6
└── 500 reactive dependencies

這樣測到的就不再是 Vue 版本差異,而是 Scenario 差異,所以我們會把 Scenario 視為一份「凍結的實驗條件」。

Rule 3:資料與操作固定

例如 huge-table,如果 Vue 3.5 測 const rows = 10000 Vue 3.6 就不能變成 const rows = 5000 ,操作流程也一樣。

Load
  ↓
Scroll
  ↓
Sort
  ↓
Pagination

兩個版本必須跑完全相同的流程,否則最後比較的其實不是 Vue 3.5 vs Vue 3.6,而是 Scenario A vs Scenario B

Rule 4:唯一允許改變的,是 Vue

最後,我們把規則收斂成最簡單的一句話:

┌───────────────────────────────────────┐
│              Validation Lab           │
│                                       │
│  Hardware        SAME                 │
│  OS              SAME                 │
│  Browser         SAME                 │
│  Node / Vite     SAME                 │
│  Scenario        SAME                 │
│  Data            SAME                 │
│  Operation       SAME                 │
│                                       │
│  Vue Version     ← ONLY CHANGE        │
└───────────────────────────────────────┘

這樣當結果出現差異時,我們才有資格開始問 是不是 Vue 效能提升默默消化的?

Baseline,其實就是「我們的起跑線」


有了固定規則之後,下一個問題就是 到底要拿什麼當比較基準?

答案就是 Baseline。

例如:我們先用 Vue 3.5 跑一次 Scenario -> Vue 3.5 -> Baseline 這個結果不是「標準答案」,它只是告訴我們在這個固定 Scenario、固定環境下,Vue 3.5 的成本是多少。

接著才換成 Vue 3.6 重新跑過剛剛 Vue3.5 跑過的路程,最後再把兩邊的 Evidence 放在一起。

Same Scenario
      │
      ├──── Vue 3.5 → Baseline
      │
      └──── Vue 3.6 → Experiment

這時候我們才開始問結果,問差異,找問題根源!

Vue 3.5
   │
   │
   ├──────────────┐
   │              │
   ↓              ↓
Baseline       Compare
                  ↑
                  │
              Vue 3.6
                  │
                  ↓
             Experiment

這也讓 Vue Pain Lab 有了一條固定的驗證路徑


走到這裡,昨天建立的六個 Scenario,終於有了真正的用途。

                    真實 Pain
                       │
                       ↓
                 建立 Scenario
                       │
                       ↓
               Freeze Test Condition
                       │
                       ↓
                Vue 3.5 Baseline
                       │
                       ↓
                 只換 Vue 版本
                       │
                       ↓
                Vue 3.6 Experiment
                       │
                       ↓
                 Compare Evidence
                       │
                       ↓
                 Engineering Decision

這條流程之後不只可以比較 Vue 3.5 和 3.6,未來換成 Vue 3.7、Vue 4,甚至其他重大 Runtime 變更,都可以重新走一次。

不過還是少了一件事


到目前為止,我們已經解決了 怎麼公平比較?,可是下一個問題馬上就出現了 到底要比較什麼?

我們知道比較前後版本,但是要看什麼呢?FPS 嗎?還是 Component Render Count?JavaScript Execution Time?Memory?Runtime Flame Chart?

如果每個 Scenario 單看一個指標說 Yes/ No,很容易再次得到錯誤結論,所以明天我們要做的事情就是把這些問題整理成一套 Evidence Matrix。

讓每一次 Vue 版本比較,都不只是「看」起來比較快,而是可以回答哪一種「成本」變了?

參考資料



上一篇
Day 3:建立 Vue Pain Validation Lab
系列文
Vue 演進驗證 × AI Coding 時代的工程實踐4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言