Реагируйте на медленный рендеринг Realm с помощью Object.keys - PullRequest
0 голосов
/ 09 марта 2020

Я только начал заниматься оптимизацией и заметил, что один из моих компонентов рендерится ~ 250 мс, хотя это всего лишь простой инструмент выбора. Код выглядит следующим образом.

type PickerProps = {
  value: string;
  setValue: (value: string) => void;
  units: Realm.Results<Units & Realm.Object>;
};

const PickerWithPortion: React.FC<PickerProps> = props => {
  const { value, setValue, units } = props;
  return (
    <Picker selectedValue={value} onValueChange={value => props.setValue(value)}>
      {Object.keys(units).map((value, index) => {
        return <Picker.Item key={units[index].id.toString()} label={units[index].shortName} value={units[index].shortName} />;
      })}
    </Picker>
  );
};

Я предполагаю, что это связано с отложенной загрузкой. Сборщик содержит только ~ 4 предмета. Что мне делать ? Эти данные области используются во всем приложении, но МОГУТ измениться позже. Должен ли я хранить его в избыточном и держать в синхронизации c с областью или я что-то упускаю? Другие компоненты, которые используют Realm.Results, занимают не так много времени, как этот компонент.

1 Ответ

0 голосов
/ 09 марта 2020

Я только что узнал, что могу использовать React.Profiler и обернул мой Пикер этим. Без включенной отладки компонент занял ~ 20 мс. Так что я думаю, что Realm работает очень медленно, если у вас включена отладка. Надеюсь, я смогу помочь другому беспомощному дураку избежать попыток оптимизировать Компонент, который хорош как есть.

...