Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中高效地实现特性翻转(或特性标志)?_Javascript_Performance_Design Patterns_Architecture - Fatal编程技术网

如何在Javascript中高效地实现特性翻转(或特性标志)?

如何在Javascript中高效地实现特性翻转(或特性标志)?,javascript,performance,design-patterns,architecture,Javascript,Performance,Design Patterns,Architecture,这个问题不是关于如何实际编写这样的特性标志本身。但主要是为了寻求有关这类系统的建议或暗示 想法很简单: 为了逐步推出/引入特性,我们需要分叉行为 为此,我们创建一个featureDescriptionFlag对象,该对象包含字符串数组。如果存在,则返回true,否则返回false 但是,还必须考虑: 如果不存在flag对象,则返回false,与未触发翻转一样 理想的情况是最终删除所有标志 我指的是功能标志,概念如下所述: ,及 ,以及 问题 我对我的实施的主要关注如下: 使用全局对象来

这个问题不是关于如何实际编写这样的特性标志本身。但主要是为了寻求有关这类系统的建议或暗示

想法很简单:

为了逐步推出/引入特性,我们需要分叉行为

为此,我们创建一个
featureDescriptionFlag
对象,该对象包含字符串数组。如果存在,则返回
true
,否则返回
false

但是,还必须考虑:

  • 如果不存在flag对象,则返回
    false
    ,与未触发翻转一样
  • 理想的情况是最终删除所有标志
我指的是功能标志,概念如下所述:

  • ,及
  • ,以及
问题 我对我的实施的主要关注如下:

  • 使用全局对象来描述标志感觉是错误的
  • 当存在条件语句时,我们是否应该缓存后续调用的结果(例如,首先执行true,然后在某处编辑
    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
      }
    }