[whatwg] Asynchronous database API feedback
mjs at apple.com
Sun Dec 9 01:59:49 PST 2007
On Dec 9, 2007, at 1:29 AM, Aaron Boodman wrote:
> I like the new Database API design a lot, but I wish there was an
> option for synchronous DB access.
> To be clear, I understand that the asynchronous database API was
> motivated by a desire to avoid another mistake like XMLHttpRequest's
> sync mode. But I think this situation is different because:
> a) Disk access is typically going to be a lot faster than network
I think this assumption is, if not exactly incorrect, somewhat
For users on network home directories, disk access /is/ network
access. This is a common setup at large corporations and educational
institutions. We have specific experience with WebKit that doing
sqlite database access from the UI thread resulted in frequent long UI
stalls for Apple's users on network home directories.(*)
Now, you might argue that network home directories are not "typical"
and this is true, but the web application has no way to know when it
might hit the atypical case and thereby block the user's UI, just as
with synchronous XMLHttpRequest you have no way to know when the user
is on a slow network connection.
So I continue to believe that it's not safe to do synchronous I/O from
the UI thread.
Another important consideration: even ignoring distributed
filesystems, how do web application developers decide when the writes
they are doing are definitely small enough that it's safe to use the
Your test shows 3KB written in a tenth of a second, but datastores
could easily be much larger than that. If the time scales linearly,
then even a modest 300KB of data could take 10 seconds to write,
clearly an unacceptable amount of time to stall the UI (I hope it
doesn't scale linearly because that would be alarmingly slow, but
clearly at some size it gets slow).
Given how wildly hardware varies, I'm not sure how web developers can
safely make this choice. It seems likely that they'd choose whatever
seems to work for them in simple cases, and not test at all on slower
filesystems. If the queries they do vary in size, they may not test at
extreme sizes. These are the same kinds of cases where synchronous XHR
creates surprising problems - it seems ok on the developer's fast
local network, so why expect that end users will see a problem?
* - For users with local home directories we only saw this for large
transactions, but it was still a problem. The specific case I'm
talking about is our favicon database, and we ultimately put all the
database access on a background thread to solve these problems. In any
case I do not think it likely that typical web developers will do a
better job of navigating the synchronous database I/O pitfall.
More information about the whatwg