Как отобразить listItem из FlatList одновременно при загрузке данных? - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть компонент {data.word}.

И у меня есть данные о загрузке 100 000 слов из файла JSON.

При поиске по этому коду ниже. Если результат возвращает 10000 слов. Это займет 4-5 секунд. Затем только что обновили соответственно.

for(let i = 0, l = data.length; i < l; ++i) {
            if(data[i].word.toLowerCase().indexOf(inputText) === 0){
                filteredWords.push(glossaries[i]);
            }
}

Мой вопрос заключается в том, как я могу загрузить данные поиска и одновременно начать рендеринг плоского списка, или есть ли лучший код для более быстрого поиска. (Мое текущее приложение, когда я ввожу поисковое слово в поле поиска, для отображения обновленного плоского списка, который выглядит неловко, требуется 4-5 секунд.

Спасибо

1 Ответ

0 голосов
/ 26 апреля 2018

100000 записей - это достаточно много для поиска, особенно когда вы делаете это во время выполнения JS на мобильном устройстве, которое также отвечает за остальную часть вашего приложения. Несколько оптимизаций, которые я бы предложил:

  • Если вы просто хотите сопоставить в начале слова (например, «mat» будет соответствовать «mattress», а «at» не будет), посмотрите на структуру данных, такую ​​как Suffix Tree, Реализация этого должна значительно ускорить ваше время поиска.
  • Я вижу, что вы преобразуете все слова в нижний регистр, пока просматриваете их, попробуйте ввести в данные слова все слова, уже прописные, чтобы вам не нужно было выполнять эту операцию 100000 раз с каждое нажатие клавиши.
  • Убедитесь, что вы выполняете рендеринг только один раз и не переопределяете список каждый раз, когда найдено совпадение. Обновляйте состояние компонента только после того, как вы закончили поиск строк.

Эти настройки должны сделать ваше приложение намного быстрее.

...