跳转到内容

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 也不会 reject。每一次读取都通过级联解析:最新获取的值,然后是这个浏览器记录的最后一个值,然后是你的默认值,然后是 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——针对它们的定向规则对浏览器来说永远不会匹配。