Какое локальное хранилище в html5 я могу безопасно использовать в потоке пользовательского интерфейса браузера и потоке веб-работника

Я пытался использовать api базы данных web sql в браузерах на базе webkit. Я использовал асинхронный API в основном потоке пользовательского интерфейса и веб-воркер. Оба потока обращаются к одной и той же базе данных (которая, как вы знаете, является основой sqlite)

Все работает нормально, но иногда транзакции теряются или одна транзакция терпит неудачу, и это похоже на состояние синхронизации/гонки. Похоже, что доступ к базовой базе данных sqlite не является потокобезопасным.

Еще немного фона. Мой веб-воркер просто выполняет запрос к таблице, в которую может быть вставлена ​​запись из основного потока пользовательского интерфейса.

Мне интересно, действительно ли где-то задокументировано, что локальное/веб-хранилище может быть безопасно доступно как из потока пользовательского интерфейса, так и из рабочего веб-потока? Я где-то читал, что indexeddb api является потокобезопасным, но это не помогает мне прямо сейчас, так как его поддержка браузерами плохая или отсутствует для браузеров, на которые я ориентируюсь (по крайней мере, я так думаю - Я получаю информацию с сайта http://caniuse.com )

Любые идеи будут с благодарностью получены


person paul    schedule 15.02.2012    source источник
comment
Я даже не знал, что можно получить доступ к локальному хранилищу в рабочем потоке? См. раздел stackoverflow.com/questions/6179159/.   -  person Teemu Ikonen    schedule 18.02.2012
comment
Да, возможно, ты прав. Возможно, я сделал неверное предположение, поскольку базы данных WEB SQL доступны из рабочего потока. К сожалению, они не кажутся потокобезопасными, когда вы открываете одну и ту же базу данных веб-sql из 2 интерфейсов браузера и веб-работника.   -  person paul    schedule 21.02.2012
comment
WebSQL устарел, поэтому я думаю, вы не хотите его использовать (даже если он был потокобезопасным). Скоро у нас будет поддержка indexedDB в webWorkers.   -  person Ido Green    schedule 11.03.2012


Ответы (1)


Вы не можете использовать localStorage или sessionStorage из WebWorkers.

Хотя обе операции являются синхронными, они не представляют реальной проблемы для простой записи и чтения данных. Проблема более актуальна при запуске браузера, но это проблема реализации браузера.

Взгляните на это, должно помочь: http://www.nczonline.net/blog/2012/04/25/the-performance-of-localstorage-revisited/

person Francisc    schedule 20.06.2012