[whatwg] Active workers when user leaves the page
jonas at sicking.cc
Fri Aug 8 12:01:54 PDT 2008
This is something that have been in the back of my brain for a few days:
How do we deal with the user navigating a way from a page if there's a
Worker in the middle of some very long running script?
First off, please notice that this discussion is 100% orthogonal to the
communications API discussion that is ongoing in another thread. I don't
want to get the two mixed up.
We don't really want to always allow a worker to finish working, even if
the user leaves the only page that is currently using the worker. I.e.
if someone has an infinite loop (by accident or intentionally), I don't
think we want to leave that running until the user shuts down the
browser. In fact, the user could very well be leaving the page because
he/she feels that it is sucking up too much CPU power.
One possible solution is to simply set the .closing flag inside the
worker and hope that the worker will honor that flag and break out ASAP.
The UA could even at that point give the worker some set amount of time
before forcefully killing the worker. We have a concept of a 'slow
script' dialog in firefox that we use if scripts on the main thread take
too long to run. The dialog asks the user if he/she wants to continue
running the current script, or forcefully break it.
This will not usually be used for workers (the whole point is that they
take a long time to finish), but we could engage it once the user tries
to leave the page.
I do want to be agressive with killing workers when the user leaves a
page since that makes for better user experience. However I'm also
worried about stopping scripts halfway through breaking things and
leaving the site with half-finished operations that are stored in
databases or localStorage.
Also note that the the presence, or lack of, fastback cache doesn't
really make a difference. Pages are eventually going to get purged from
the fastback cache, so it just pushes the problem to a point a little
later in time.
How has gears dealt with this problem so far? What are your experiences
More information about the whatwg