[whatwg] Active workers when user leaves the page

Jonas Sicking 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 
with it?

/ Jonas

More information about the whatwg mailing list