[whatwg] should we add beforeload/afterload events to the web platform?

Boris Zbarsky bzbarsky at MIT.EDU
Tue Jan 10 08:43:20 PST 2012

On 1/10/12 2:22 AM, Henri Sivonen wrote:
> I'm worried about the interaction with speculative loading. Right now,
> Gecko is more aggressive than WebKit about speculative loading.

Actually, I just checked and WebKit simply fires the "beforeload" event 
way after it actually starts the load in speculative load situations. 
Consider this testcase:

<!doctype html>
   var start = new Date;
   var log = "";
   document.addEventListener("beforeload", function(e) {
     log += "Starting load of " + e.target.id + ": " + (new Date - 
start) + "\n";
   }, true);
   window.onload = function() {
     log += "Finished page load: " + (new Date - start) + "\n";
<script id="one" 
         onload="log += 'Finished load of one: ' + (new Date - start) + 
<script id="two" 
         onload="log += 'Finished load of two: ' + (new Date - start) + 

The slowResponse.cgi script takes N seconds to respond where N is passed 
in the "time" parameter.

When I load this testcase in either Chrome or Safari, I see the "load of 
one" start at about 1ms into the timeline an finish about 4s into the 
timeline.  I see the "load of two" start about 4s into the timeline and 
finish about 5s into the timeline.  Since the "load of two" actually 
takes at least 5s from when it starts, that means that the load really 
started about 4s before the "beforeload" event fired.

So in WebKit this event is only good for preventing _processing_ of the 
data in the page (e.g. preventing the script from executing when the 
target is a <script>) but not much use for preventing loads, even if 
some people seem to think that it is.

> I don't want to make Gecko less aggressive about speculative loading in
> order to fire beforeload exactly at the points where WebKit fires
> them.

The good news is that per above we really wouldn't have to; we'd just 
fire it as late as we feel like.  ;)


More information about the whatwg mailing list