特性切换

✍ dations ◷ 2025-08-13 22:30:22 #计算机编程,软件工程

特性切换或称功能切换,英语:feature toggle、feature switch、feature flag、feature flipper或conditional feature等。它是软件开发中的一种技术,是替代维护多个源代码分支(也称特性分支)的一种方案,这使特性在完成并正式发布前也可以得到测试。特性切换是在运行期间隐藏、启用或禁用特定功能。例如在开发过程中,开发人员可以启用功能以进行测试,而其他用户不会被启用该功能和受到它的影响。

持续发布和持续交付为开发人员提供了有关其代码的快速反馈,而这要求尽早地集成其代码更改。特性分支为此过程引入了一个旁路。特性切换是实现持续交付的一项重要技术。

这种技术使开发人员得以发布包含未完成功能的产品版本。这些未完成的功能被隐藏或被禁用,因此不会出现在用户界面中。这使软件可以发布很多次小的增量版本,而无需承担不断分支与合并的成本。特性切换使软件集成的周期得以更短。项目团队可以使用特性切换来加速开发过程,因为产品中可以包含默认不启用的未完成代码。

特征切换在本质上是条件语句中使用的变量。因此,这些条件语句中的块可以根据特征切换的值切换为开或关。切换为关的代码块类似于被注释的代码。这是开发人员可以绕过它们软件中的某些流程,例如尚未准备好部署的功能。

功能切换的主要用途是避免在发布前的最后一刻因软件合并而产生的冲突。尽管这可能导致切换负债。切换负债是指一个功能已被永久关闭后,软件中仍存留着死亡的代码,并可能带来一些开销。这种代码必须被仔细甄别才能删除,以免干扰到其他代码。

功能切换主要有两种类型。一种是开发人员在产品发布之前决定保留或删除的发布切换(取决于其效果)。另一种是业务切换,它相较于旧的代码是满足不同的用法。

特性切换可用于以下情况:

特性切换可以存储在:

功能组由一组可切换的互相配合的功能组成。这使开发人员可以轻松管理一系列相关的切换开关。

特性标志的另一个好处是Canary发布。Canary发布(或Canary启动或Canary部署)允许开发人员逐步为一小群用户测试某项功能。如果功能的性能不令人满意,则可以回滚它,没有任何不利影响。

虽然在大多数编程语言(例如Java、Angular JS、PHP、JavaScript等)中可以轻松实现这种模式,也存在一些函数库来进一步简化这种用法。

马丁·福勒指出,功能切换应该是你将功能投入生产时的最后一种选择。取而代之,最好将功能分解成更小的部分,将每个部分安全地实现来引入到产品发布,从而避免导致问题。

许多大型网站都使用特性切换技术,包括Flickr、Disqus、Etsy、reddit、Gmail和Netflix。

有许多适用于各种编程语言和平台的开源的特性切换和特性标记解决方案。

相关

  • 中西部美国中西部(英语:Midwest)通常指的是美国地理上中北部的州,包括俄亥俄州、印第安那州、密歇根州、伊利诺伊州、威斯康星州、艾奥瓦州、肯萨斯州、密苏里州、明尼苏达州、内布拉
  • 哥特式哥特式艺术,又译作哥德式艺术(法语:Art gothique),为一种源自法国的艺术风格,该风格始于12世纪的法国,盛行于13世纪,至14世纪末期,其风格逐渐大众化和自然化,形成国际哥特风格,直至15世
  • 昂利·庞加莱英国皇家天文学会金质奖章(1900年) 西尔维斯特奖章 (1901) 马泰乌奇奖章 (1905) 博尧伊奖(英语:Bolyai Prize) (1905)朱尔·亨利·庞加莱(法语:Jules Henri Poincaré,法语发音宽式
  • 小肠血管发育不良肠道血管发育不良是肠道血管异常增生而引起下消化道慢性失血。由于是间断性出血,诊断检查时不出血,因此难诊断。肠道血管的异常状态,无法解释的肠道出血与贫血。损害常是多重的
  • 城市边缘区城市边缘区(英语:rural–urban fringe)是指城镇与乡村的交界处,或指城市和农村的土地用途混合、过渡的区域。古代筑有城墙的城市,城墙即可以作为城乡的明显界线。近代城镇普遍朝
  • 牛津县牛津县(英语:Oxford County)是美国缅因州西部的一个县,北邻加拿大,西邻新罕布什尔州。面积5,634平方公里。根据美国2000年人口普查,共有人口54,755。县治南巴黎(South Paris)。成立
  • 世界童军大露营世界童军大露营(法语:Jamboree Scout Mondial)为国际间童军大露营的一种,通常有数千甚至数以万计来自世界各地十四至十七岁之青年参与。第1次世界童军大露营由伦敦英国童军总会
  • 黑寡妇黑寡妇可以指:
  • 约瑟夫·詹金斯·罗伯茨约瑟夫·詹金斯·罗伯茨(Joseph Jenkins Roberts,1809年3月15日-1876年2月24日)是利比里亚(Republic of Liberia)的第一任(1848年1月3日-1856年1月7日)和第七任(1872年1月1日-1876年1月
  • 武克·德拉什科维奇武克·德拉什科维奇(塞尔维亚语:Вук Драшковић, .mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Un