

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 功能标志
<a name="feature-flags"></a>

可以在微前端中实现功能标志，以便在多个环境中协调测试和发布功能。功能标记技术包括将决策集中在基于 Boolean 的商店中，并以此为基础驱动行为。它通常用于静默传播更改，这些更改可以一直隐藏到特定时刻，同时解锁新版本以获取原本会被屏蔽的新功能，从而降低团队速度。

以团队开发将在特定日期推出的微前端功能为例。该功能已准备就绪，但需要与独立发布的另一个微前端的更改一起发布。阻止两个微前端的发布将被视为一种反模式，部署后会增加风险。

取而代之的是，团队可以在数据库中创建一个布尔特征标志，供他们在渲染期间使用（可能是通过对共享功能标志 API 的 HTTP 调用）。团队甚至可以在测试环境中发布更改，在该环境中，布尔值设置为，`True`以便在启动生产之前验证跨项目的功能和非功能需求。

使用功能标志的另一个示例是实现一种机制，通过`QueryString`参数设置特定值或将特定的测试字符串存储在 cookie 中，从而覆盖标志的值。在发布日期之前，产品所有者可以对功能进行迭代，而不会阻止其他功能的发布或错误修复。在给定日期，更改数据库上的标志值会立即使更改在生产中可见，而无需跨团队协调发布。功能发布后，开发团队会清理代码以删除旧行为。

其他用例包括发布基于上下文的功能标记系统。例如，如果一个网站以多种语言为客户提供服务，则某项功能可能仅适用于特定国家/地区的访问者。功能标志系统可能取决于发送国家/地区上下文的消费者（例如，通过使用 `Accept-Language` HTTP 标头），并且根据该上下文，可能会有不同的行为。

虽然功能标志是促进开发人员和产品所有者之间协作的有力工具，但它们依靠人们的勤奋来避免代码库的严重退化。在多个功能上保持标记处于活动状态可能会增加故障排除时的复杂性，增加 JavaScript 捆绑包的大小，并最终积累技术债务。常见的缓解活动包括以下内容：
+ 在标记后面对每个功能进行单元测试以降低出现错误的可能性，这可能会在运行测试的自动 CI/CD 管道中引入更长的反馈循环
+ 创建工具来衡量代码更改期间捆绑包大小的增加，在代码审查期间可以缓解这种情况

AWS 提供了一系列解决方案，用于使用亚马逊 CloudFront 函数或 Lambda @Edge 优化边缘的 A/B 测试。这些方法有助于降低集成解决方案或您用来维护假设的现有 SaaS 产品的复杂性。有关更多信息，请参阅 [A/B 测试](https://aws.amazon.com/developer/application-security-performance/articles/a-b-testing/)。