Могу ли я оставить базу данных websql открытой для повышения производительности?

У меня есть мобильное приложение HTML5, работающее на iOS и Android. Пользователи обычно хранят немного локальных данных в нескольких таблицах. Скажем, пять таблиц со средним числом записей в три.

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

Мне интересно, могу ли я просто открыть базу данных один раз, обойтись без всех оболочек транзакций и сразу же выполнить sql?

Таблица никогда не используется каким-либо другим человеком или процессом, кроме пользователя, обновляющего свои данные, или приложения, считывающего данные после обновления и отправляющего данные на сервер для расчетов и статистики.

Самое главное: если я следую вышеуказанной стратегии, и база данных никогда не закрывается, но пользователь или ОС закрывает приложение (собственно говоря: веб-просмотр), будут ли измененные данные сохраняться или будут потеряны?


person Wytze    schedule 28.08.2012    source источник
comment
Судя по опыту, производительность WebSQL не так уж и плоха — внутри одной транзакции вставка нескольких тысяч записей занимает меньше секунды. Пять таблиц с тремя записями действительно должны быть простым делом... Наш JS-клиент открывает базу данных при запуске и никогда не закрывает ее, и мы никогда не теряли данные после фиксации транзакции.   -  person DCoder    schedule 28.08.2012


Ответы (2)


Хорошо, я нашел проблему. Я использую структуру persistenceJS для работы с локальной базой данных. Это сохраняет копию данных websql, хранящихся в объекте js, и синхронизирует базу данных и объект js. Это процесс, который занимает некоторое время, и я помещал все в обработчик «flush», который происходит после синхронизации.

person Wytze    schedule 28.08.2012

Я также держу соединение открытым. Для IndexedDB я мог одновременно открывать пользовательский интерфейс и фоновый поток без каких-либо проблем. Я считаю, что WebSQL будет таким же. Если вы используете только файл JS, вы можете попробовать мою собственную библиотеку JavaScript, это очень тонкая оболочка как для IndexedDB, так и для WebSQL. Но библиотека написана для стиля IndexedDb.

person Kyaw Tun    schedule 04.09.2012