2014-10-03 2 views
4

Недавно Apple добавила поддержку индексированногоdb как в iOS8 Safari, так и в Safari 7.1 на OSX. Я пытаюсь использовать это в веб-приложении, которое хранит около 65 000 записей в indexeddb и запрашивает их с использованием некоторых составных индексов.Safari-реализация indexeddb очень медленная

Это работает для меня, но по сравнению с внедрением Chrome indexeddb, это действительно очень медленно.

Конкретно ... запрос, который занимает 2 мс от индекса indexeddb от Chrome, занимает 500 мс против индексированного индекса Apple. Этот конкретный запрос использует составной индекс indexeddb (2 поля в ключе), используя значение IDBKeyRange.only для ключа, чтобы вернуть около 100 документов общей суммы 65 000.

Мое приложение поддерживает websql как механизм хранения, а также, когда я переключаюсь на него в Safari, производительность отличная. Мой запрос возвращается через несколько мс, как и в Chrome.

У кого-либо еще есть проблемы с медленностью реализации индекса indeddb от Apple? Любые предложения относительно того, как заставить его работать лучше или нам просто нужно ждать, пока Apple его исправит?

Я считаю, что реализация indexeddb от Apple на самом деле является только оболочкой поверх websql, и тот факт, что я могу реализовать свое приложение с использованием websql напрямую с хорошей производительностью, подразумевает, что такая оболочка, если она будет реализована, должна работать нормально. К сожалению, это еще не так!

+1

Обновление ... Я установил бета-версию iOS9, которая содержит Safari 9 и indexeddb исправлена! Производительность хороша, и проблемы с ключами и другими ошибками исчезли. Я тестировал его до 1,5 ГБ json-документов, и все было в порядке. Кроме того, ограничение размера данных 50 Мбайт пропало, и пользователю не нужно запрашивать сохранение данных. – Category6

+0

Обновление 2. Я говорил слишком рано. iOS9 indexeddb немного лучше, потому что ограничение на 50 Мбайт ушло, и исправлены некоторые ошибки, но его производительность по-прежнему ужасна, если у вас есть несколько тысяч документов. Я вижу время ответа более чем на 5 секунд для запросов индекса. Это непригодно, если у вас есть несколько документов. – Category6

ответ

2

Мы видели то же самое. Процесс, который вставляет 10000 объектов, занимает около 5-6 секунд для завершения Android и 15 минут для завершения на iOS8.

Safari является WebKit-браузер, так что если он использует один и тот же код, что это:

https://github.com/WebKit/webkit/blob/master/Source/WebKit2/DatabaseProcess/IndexedDB

затем IndexedDB это (плохо) на основе базы данных SQLLite.

+0

Реализация Firefox indexeddb также основана на салюте, но хорошая производительность. –

0

У меня также был этот выпуск. Но я также обнаружил, что он становится медленнее, чем больше стол. Мне нужно было сохранить около 30 000 записей, полученных в части около 2000 с сервера и затем вставленных. Каждая вставка пакета становилась медленнее, чем предыдущая, до тех пор, пока ей не потребовалось более 80 минут для вставки. Решение, с которым мы столкнулись (и это ужасно уродливо), заключается в создании отдельного хранилища объектов для каждой части синхронизации. Затем вам нужно иметь дело с запросами на нескольких объектах/etc. но он сделал это так, чтобы он был полезен.

До тех пор, пока не будет реализована их реализация indexeddb apple get, это было лучшее решение, которое у меня есть.

+0

Просто из интереса мы сталкиваемся с аналогичной проблемой времени. Сколько (приблизительно) объектов хранилища вы создали? –

+0

У меня он настроен как динамический, я думаю, что он помещает как минимум 2000 записей в хранилище, а затем переходит к следующему. Они запрашиваются на сервере по id, а затем вставляются в их собственное хранилище объектов.g select * где id> 0 И id <2000; –

+0

Итак, я думаю, что на данный момент он генерирует нечто вроде 16 объектов-хранилищ с данными производства, которые мы используем. Обратите внимание, что в зависимости от того, существуют ли все записи/являются активными/etc для каждого идентификатора, некоторые из объектов хранятся только ближе к 1500, где, когда другие полностью заполнены –

Смежные вопросы