如何在Javascript中高效地实现特性翻转(或特性标志)?
这个问题不是关于如何实际编写这样的特性标志本身。但主要是为了寻求有关这类系统的建议或暗示 想法很简单: 为了逐步推出/引入特性,我们需要分叉行为 为此,我们创建一个如何在Javascript中高效地实现特性翻转(或特性标志)?,javascript,performance,design-patterns,architecture,Javascript,Performance,Design Patterns,Architecture,这个问题不是关于如何实际编写这样的特性标志本身。但主要是为了寻求有关这类系统的建议或暗示 想法很简单: 为了逐步推出/引入特性,我们需要分叉行为 为此,我们创建一个featureDescriptionFlag对象,该对象包含字符串数组。如果存在,则返回true,否则返回false 但是,还必须考虑: 如果不存在flag对象,则返回false,与未触发翻转一样 理想的情况是最终删除所有标志 我指的是功能标志,概念如下所述: ,及 ,以及 问题 我对我的实施的主要关注如下: 使用全局对象来
featureDescriptionFlag
对象,该对象包含字符串数组。如果存在,则返回true
,否则返回false
但是,还必须考虑:
- 如果不存在flag对象,则返回
,与未触发翻转一样false
- 理想的情况是最终删除所有标志
- ,及
- ,以及
featureDescriptionFlag
,然后下一个调用返回false)window.featureFlagDescriptor = {someFunction: ['example']};
我在这里担心的是,允许这种翻转可能是危险的,我脑子里有关于如何利用这种翻转的警报
稍后,在一个必须有两种行为的函数中,我们会:
function someFunction(){
// Code...
if(featureFlag('someFunction', 'example')) {
// Work only if flag exist
} else {
// Former behavior
}
}
结论
有什么建议和改进建议吗
我有,最终将制作一个完整的工作示例。我认为您的方法是有缺陷的,因为通过使用不引人注目的javascript思想,您应该能够轻松处理基于浏览器环境的降级。为什么需要这些标志?我不是说浏览器功能。但是由于CI上下文中的功能卷展栏,功能标志会翻转。这些功能中的每一个都应该具有相应的功能。在该功能中,当功能不可用时禁用按钮,当功能可用时启用按钮。如果将鼠标悬停在已禁用的功能上,相同的功能可以确保通知用户该功能将在将来可用。为什么要让它变得过于复杂呢?在我的例子中,我实际上不得不根据我们是否要在UserAcception主机上推出该功能来改变行为,但仍然需要处理分支中的代码。我们使用的客户端infra和部署策略太不稳定,无法使用适当的分支策略。虽然不理想,但它的工作方式却很有魅力,就像为客户端演示的一样。您可以轻松地加载一个javascript文件,将不可接受的行为添加到主命名空间中,这样开发人员仍然可以进行测试,一旦测试完成,就可以将代码移动到主主干中。保持简单。
function someFunction(){
// Code...
if(featureFlag('someFunction', 'example')) {
// Work only if flag exist
} else {
// Former behavior
}
}