Самый эффективный способ заполнить / распространить indexedDB [хранилище данных] с 350000 записями
Итак, у меня есть главное хранилище объектов indexedDB с около 30 000 записей, для которых мне нужно выполнять полнотекстовые поисковые запросы. Делая это с плагином ydn fts, вы создаете второе хранилище объектов с около 300.000 записей. Теперь, поскольку генерация этого хранилища данных "index" занимает довольно много времени, я решил, что было бы быстрее распространять и содержимое индекса. Это, в свою очередь, создало ZIP-файл размером около 7 МБ, который после распаковки на стороне клиента дает более 40 МБ данных. В настоящее время я зацикливаюсь на этих данных, вставляя их одну за другой (асинхронно, поэтому время обратного вызова используется для анализа следующих строк), что занимает около 20 минут. Поскольку я делаю это в фоновом режиме своего приложения через веб-работника, это не является абсолютно неприемлемым, но все еще кажется чрезвычайно неэффективным. После заполнения база данных становится достаточно быстрой, чтобы ее можно было использовать даже на мобильных устройствах среднего и высокого класса, однако время заполнения мобильных устройств от 20 минут до одного часа просто сумасшедшее. Любые предложения, как это можно улучшить? Или единственный вариант минимизации количества записей? (что означало бы написание собственного полнотекстового поиска... не то, чего я бы с нетерпением ждал)
1 ответ
Ваш размер данных достаточно велик для мобильного браузера. Если пользователь не использует ваше приложение, отправлять все данные клиенту не стоит. Вы должны использовать серверную часть для полнотекстового поиска, одновременно ловя ловушку, как показано в этом примере приложения. Таким образом, пользователю не нужно ждать индексации полнотекстового поиска.
Полнотекстовый поиск требует индексировать все токены (слова), за исключением некоторых ключевых слов. Стемминг активируется только тогда, когда lang
установлен в en
, Вы должны профилировать свое приложение, какие части занимают время. Я предполагаю, что браузер занимает большую часть времени, в этом случае вы не можете выполнять большую часть оптимизации, кроме распараллеливания. Отправка проиндексированных данных (как вы описали выше) не сильно поможет (но, пожалуйста, подтвердите, сравнивая). Также веб-работник не поможет. Я предполагаю, что у вашего приложения нет проблем с медленным ответом из-за индексации.
Есть ли у вас другие жалобы, кроме медленного индексации?