Если вы посмотрите, что вызывает эту ошибку в реализации Chrome, например https://chromium.googlesource.com/chromium/src.git/+/master/content/browser/indexed_db/indexed_db_database.cc,, это происходит, когда размер сообщения слишком велик.Здесь размер сообщения в основном относится к объему данных, которые отправляются из C ++ (двоичного файла браузера) в Javascript в результате некоторой обработки.
Чтобы избежать отправки слишком большого количества данных, есть несколько вещей, которые вы могли быdo:
- убедитесь, что вы никогда не вызываете getAll для большого количества данных
- используйте ограничение при вызове getAll для потенциально большого объема данных
- вместо этого используйте openCursorиз getAll
- хранить меньшие объекты
Я думаю, что вам лучше всего попробовать перейти на openCursor.Это будет получать ваши предметы по одному (по запросу).Таким образом, вы никогда не столкнетесь с этой ошибкой.С помощью курсора вы теряете чуть-чуть скорости, но вы получаете масштабируемость.
Чтобы заставить курсор работать так же, как getAll, это просто.Все, что вам нужно сделать, это сначала объявить пустой массив, затем запустить курсор и выполнить итерацию, каждый раз добавляя элемент курсора в массив.В конце итерации вы, по сути, собрали из одного за раз кусочки того же массива, что и при вызове getAll.