跳到內容

Web 快速入門

幾分鐘之內,你的網站就會讀到一個真實的 feature flag:持久快取、在每一種情況下都有失效安全的答案,而且在瀏覽器裡沒有任何東西需要你管理。

零執行期相依;整個 SDK 壓在 10 kB gzip 的上限之下。

這個 SDK 放在 GitHub 上的公開儲存庫裡,直接從那裡安裝,並固定在發布版本:

Terminal window
npm install github:FortressFlag/FortressFlag_SDK_web#v1.0.0

這個套件會在安裝時自行建置,下面的 import 就是它的進入點。

只做一次,在你的頁面或應用程式啟動的早期:

import { Environment, FortressFlag } from "@fortressflag/sdk-web";
FortressFlag.start({
sdkKey: "ffc_prod_…", // 來自你的專案的 SDK 金鑰畫面
environment: Environment.PRODUCTION,
});

start 會立即返回;先前造訪時快取的值馬上可用,新的值在背景到達。這把金鑰是用戶端金鑰:它設計上就是在你的頁面原始碼裡看得到的。

if (FortressFlag.isEnabled("new-checkout", false)) {
// 渲染新的結帳流程
}

stringValue 和 numberValue 以同樣的方式讀取多變體 flag,而 FortressFlag.onChange 會在值變動時通知你,讓你重新渲染。

就這樣,你的 flag 上線了。在儀表板切換它,再打開一次頁面(或等一次輪詢),看著它跟上。

這套 API 裡沒有任何呼叫會拋出例外,也沒有任何它回傳的 promise 會被拒絕。每一次讀取都透過這條串接解析:最新抓取到的值,然後是這個瀏覽器記錄的最後一個值,然後是你的預設值,然後是 false。FortressFlag 故障、斷掉的網路、廣告攔截器、被撤銷的金鑰,全都解析成一個 flag 值,沒有一個會以錯誤的形式觸及你的程式碼。

(廣告攔截器的情況是真實存在的:有些隱私擴充功能會攔截 flag 請求。快取的值會繼續提供,而一個從未成功抓取的瀏覽器會提供你的預設值。「開了 uBlock flag 就不更新」是串接在正常運作,不是 bug。)

  • 裝置身分放在 localStorage,範圍限於你的來源。它是隨機鑄造且假名化的,而且你的頁面自己的 JavaScript 讀得到,和它旁邊的 SDK 金鑰是同一類的值。
  • 私密視窗會鑄造用完即丟的身分。每個私密工作階段在它持續期間算一台裝置;使用者清除網站資料也會變成一台新裝置。而一個人同時在你的網站、iOS 應用程式和 Android 應用程式上,最多算三台裝置:沒有跨平台的串接,這是設計如此。
  • 你的測試套件是免費的。由 Playwright、Selenium、Puppeteer 或 Cypress 驅動的瀏覽器會表明身分,SDK 會在那裡鑄造一個 sim_ 身分:照常得到 flag,永遠不計費。
  • Web 上沒有版本標籤。SDK 會自動送出 platform 和 sdkVersion,但一個頁面沒有可靠的 appVersion 或 osVersion:針對那些的鎖定規則對瀏覽器永遠不會命中。