- From: duanyao <duanyao@ustc.edu>
- Date: Fri, 17 Jul 2015 10:13:20 +0800
- To: Joshua Bell <jsbell@google.com>
- CC: "public-webapps@w3.org" <public-webapps@w3.org>
- Message-ID: <55A864C0.9080709@ustc.edu>
I'm glad to hear that somebody has been working on this issue!
After read your proposal and previous dicussion, I realized that such
locking mechanism doesn't have to be tied to specific storage mechanism,
and a promise-based API
is more general than a synchronous API.
在 2015年07月16日 01:12, Joshua Bell 写道:
> Based on similar feedback, I've been noodling on this too. Here are my
> current thoughts:
>
> https://gist.github.com/inexorabletash/a53c6add9fbc8b9b1191
>
> Feedback welcome - I was planning to send this around shortly anyway.
>
> On Wed, Jul 15, 2015 at 3:07 AM, 段垚 <duanyao@ustc.edu
> <mailto:duanyao@ustc.edu>> wrote:
>
> Hi all,
>
> I'm developing an web-based editor which can edit HTML documents
> locally (stored in indexedDB).
> An issue I encountered is that there is no reliable way to ensure
> that at most one editor instance (an instance is a web page) can
> open a document at the same time.
>
> * An editor instance may create a flag entry in indexedDB or
> localStorage for each opened document to indicate "this document
> is locked", and remove this flag when the document is closed.
> However, if the editor is closed forcibly, this flag won't be
> removed, and the document can't be opened any more!
>
> * An editor instance may use storage event of localStorage to ask
> "is this document has been opened by any other editor instance".
> If there is no response for a while, it can open the document.
> However, storage event is async so we are not sure about how long
> the editor has to wait before opening the document.
>
> * IndexedDB and FileHandle do have locks, but such locks can only
> live for a short time, so can't lock an object during the entire
> lifetime of an editor instance.
>
> In a native editor application, it may use file locking
> (https://en.wikipedia.org/wiki/File_locking) to achieve this purpose.
> So maybe it is valuable to add similar locking mechanism to
> indexedDB/web storage/FileHandle?
>
> I propose a locking API of web storage:
>
> try {
> localStorage.lock('file1.html');
> myEditor.open('file1.html'); // open and edit the document
> } catch (e) {
> alert('file1.html is already opened by another editor');
> }
>
> Storage.lock() lock an entry if it has not been locked, and throw
> if it has been locked by another page.
> The locked entry is unlocked automatically after the page holding
> the lock is unloaded. It can also be unlocked by calling
> Storage.unlock().
>
> What do you think?
>
> Regards,
> Duan Yao
>
>
>
>
Received on Friday, 17 July 2015 02:14:40 UTC