功能開關
規則
- 使用功能開關進行分階段發布 — 將程式碼置於開關之後,逐步啟用
- 開關類型:布林(開/關)、百分比(10% 的使用者)、使用者目標定位(特定 ID / 區段)
- LaunchDarkly 適用於企業、Flagsmith 用於開源、Vercel Flags 或
@vercel/flags 適用於 Next.js
- 預設在伺服器端評估開關 — 僅將開關值傳遞給客戶端,絕不傳遞評估邏輯
- 開關命名慣例:
enable-new-checkout、show-pricing-v2 — 描述性、kebab-case
- 全面上線後清除開關 — 過時的開關是技術債;設定到期日
- 百分比發布:對使用者 ID 進行哈希以實現一致分桶 — 同一使用者始終看到相同變體
- 新功能預設開關為關閉 — 若開關服務不可用,應安全地失敗
- 使用開關進行 A/B 測試:定義變體、追蹤轉換事件、衡量統計顯著性
- 在本地開發時,將開關覆蓋值儲存於環境變數中
模式
import { flag } from "@vercel/flags/next";
export const showNewCheckout = flag({
key: "show-new-checkout",
decide: () => false,
});
const enabled = await showNewCheckout();
import * as ld from "@launchdarkly/node-server-sdk";
const client = ld.init(process.env.LAUNCHDARKLY_SDK_KEY!);
const showFeature = await client.variation("new-checkout", user, false);
避免
- 未使用開關就發布功能 — 每個新功能都應可切換
- 巢狀開關依賴 — 保持開關邏輯扁平且獨立
- 在 100% 上線後仍將開關留在程式碼中 — 排定在 2 週內清理
- 客戶端評估開關暴露目標定位規則 — 在伺服器端評估,傳送結果