Потоковая типизация избыточных действий - проблема производительности - PullRequest
0 голосов
/ 28 января 2019

Я следовал за документооборотом и печатал создателей редукционных действий, используя объединение (https://flow.org/en/docs/react/redux/#toc-typing-redux-actions)

, поэтому у меня есть файл со ВСЕМИ действиями, собранными в 1 объединение, как в примере:

type Action =
  | { type: "FOO", foo: number }
  | { type: "BAR", bar: boolean }
  | { type: "BAZ", baz: string };

Action тип импортируется в мои редукторы и используется, как в примере из документов:

function reducer(state: State, action: Action): State {
  switch (action.type) {
    case "FOO": return { ...state, value: action.foo };
    case "BAR": return { ...state, value: action.bar };
    default:
      (action: empty);
      return state;
  }
}

Проблема:

Как я уже упоминал, я собрал ВСЕ действия водин файл - в настоящее время ~ 600 действий в одном объединении. Я заметил, что в последнее время потоковому серверу требуется сумасшедшее время для запуска (более 100 секунд), перепроверка потока также является проблемой, если изменение связано с редуктором. Согласно журналам потока, файлы, содержащие редукторыпомечены как «Медленное слияние» - от 15 до 45 с.

После экспериментов я заметил, что изменение типа Action на any сокращает время с 100 до 9 с.

Вопрос:

  • может ли это быть связано с огромным Action union?
  • , если я разделю его на несколько меньших типов, которые будут содержать только действия для импорта вконкретный редуктор или это неправильный путь к FIX моя проблема?

1 Ответ

0 голосов
/ 30 января 2019

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

Кроме того, вы можете использовать flow cycle для вывода точечного файла, затем вы можете визуализировать этот файл в Gephi https://gephi.org/ для обнаружения циклов.

...