- From: Getify <getify@gmail.com>
- Date: Fri, 15 Oct 2010 08:42:48 -0500
- To: "public html" <public-html@w3.org>
?> ?> Do you have example sites that use these libraries in a mode that's
>> now broken? I'm not familiar with these libraries.
It's very important to note: merely pulling up a site like this in a suspect
browser and looking for "breakage" is a somewhat problematic way to
investigate this issue.
The pattern that will be problematic is if you are loading one or more of
your scripts from remote locations. For instance, loading jQuery from a CDN,
and then another script from another location like an analytics script, and
then some scripts from your local domain.
The changes that have been landed (in Mozilla and now in Webkit), introduce
race conditions (and sometimes just failure to load). As we know, race
conditions are not always easy to spot. You have to exhaustively test
sometimes to identify them. And they're not always repeatable. Also, if
you're not very familiar with a site's intricate JS behavior before, it's
harder sometimes to see if things are broken (especially if a site does a
good job of progressive enhancement).
But the logic is undeniable. This pattern is absolutely going to break with
these changes:
$LAB.script("anything").wait().script("http://remote.tld/else").wait().script("http://another.tld/stuff").wait();
The "preloading" trick (IE/Webkit/Chrome) will apply to "else" and "stuff",
and in FF they will be in a race condition, even though the $LAB chain
expresses that "else" needs to execute before "stuff". In Webkit with the
new patch, "else" and "stuff" will not ever even load.
Again, let's give a more concrete $LAB chain that represents a very common
pattern:
$LAB
.script("http://remote.tld/jquery.js").wait()
.script("http://remote.tld/jquery-ui.js").wait()
.script("http://another.tld/myplugins.js")
.wait(function(){
// init jQuery, jQuery-UI, and my plugins
});
You have to execute jQuery, *then* jQuery-UI, *then* your plugins. But for
performance, you want LABjs to load all 3 scripts in parallel rather than
serially. This pattern has worked in all browsers for quite awhile, and now
is going to break in FF and Webkit unless W3C acts to address the needed use
case.
--Kyle
Received on Friday, 15 October 2010 13:43:24 UTC