Что такое флаги функций?

Флаг функции — это мощный метод, который позволяет командам изменять поведение системы без необходимости изменения кода. Флаги функций и переключатели функций одинаковы и могут использоваться взаимозаменяемо.

Флаги функций в основном используются разработчиками или продуктовыми группами для выпусков Canary, когда вы предоставляете конкретную функцию только определенному набору пользователей, или A/B-тестирования, когда вашим пользователям показываются два варианта одной и той же веб-страницы в случайном порядке и позже. проанализированы, чтобы определить производительность или сравнить ее в соответствии с вашими целями. Переключатели функций помогают команде выпускать функции быстро, но безопасно.

Как работает функция Toggle

Давайте возьмем простой пример, чтобы попытаться понять, как эти вещи работают. Допустим, мы работаем над новой функцией, на создание которой потребуется время, и все мы знаем, какая это головная боль — слияние долгоживущей ветки. Вы вводите фрагмент кода, который будет определять, будет ли выполняться ваш фрагмент кода или нет.

const myNewFeature = () => {
  console.log('I am awesome')
}

const myOldCode = () => {
  // Here, I will declare a feature flag
  const featureFlag = false
  if(featureFlag) myNewFeature()
  else console.log('going back to old trash')
}

В приведенном выше примере я создал функцию myNewFeature и не хочу, чтобы она выполнялась в моем коде, потому что она неполная. Поэтому я введу флаг функции, который будет определять, должна ли выполняться моя новая функция. Это действительно небольшой пример того, что такое флаги функций.

Давайте поговорим о некоторых случаях использования флагов функций.

Использование флага функции во время выпусков Canary

Допустим, вы произвели рефакторинг кода, критичного для вашего приложения, и не решаетесь сразу выпустить его для всех пользователей. Таким образом, вы настраиваете свой флаг функции так, чтобы он включался только для меньшего процента пользователей. Эти определенные пользователи всегда будут иметь флаг функции, включенный или выключенный. Этих пользователей обычно называют Canary Cohort.

У этих канарских когорт всегда будет включен флаг функции, в то время как у других пользователей флаг функции будет отключен. Вы сможете сравнить производительность в соответствии с вашими параметрами и убедиться, что ваш рефакторинг работает должным образом. Как только вы убедитесь в производительности своего кода, вы можете включить его для всех своих пользователей.

Использование флагов функций в A/B-тестировании

В настоящее время в вашей команде ведутся дебаты о том, повлияет ли добавление функции на пользователей негативно и уменьшит ли это время приложения. Чтобы решить этот спор с помощью данных вместо случайных теорий, вы используете флаги функций для этой функции и проводите A/B-тестирование. Вы включаете флаг функции для большого набора пользователей и сравниваете поведение пользователей этой когорты с контролируемой когортой, в которой флаг функции был отключен. Таким образом, вы можете урегулировать основные споры, связанные с продуктом, используя данные.

Некоторые рекомендации, которым следует следовать при реализации флага функции

Всегда используйте абстракции при реализации флага функции. Как и в приведенном выше примере, в большинстве случаев мы можем обойтись простым if/else, но когда функция становится больше, эти if/else начинают запутываться. И трудно удалить эти флаги функций на более позднем этапе.

Допустим, мы работаем над рефакторингом компонента реакции, но это займет время, поэтому вы решили использовать переключатель функций. Если вы начнете рефакторинг в одном и том же компоненте и везде будете использовать if/else, удалить их будет сложно. Все было бы по-другому, если бы вы создали другой компонент и сохранили его использование за флагом функции. давайте посмотрим на пример ниже

function example(){
  const showRefactoredComponent = true
  if(showRefactoredComponent) {
    <RefactoredComponent />
  } else {
    <OldComponent />
  }
}

Теперь вместо того, чтобы везде использовать if/else, вы создали разные файлы. Теперь, когда мой рефакторинг завершен, все, что мне нужно сделать, это удалить один-единственный оператор if/else.

Переключатели функций очень эффективны, но могут создать много проблем, если их не использовать должным образом. Переключение функций не должно быть постоянным. Они должны быть недолговечными и удаляться из кодовой базы, как только их работа выполнена.