- From: Jake Archibald <jaffathecake@gmail.com>
- Date: Fri, 14 Mar 2014 21:03:15 +0000
- To: Kyle Simpson <getify@gmail.com>
- Cc: "whatwg@lists.whatwg.org" <whatwg@lists.whatwg.org>
On 14 March 2014 20:10, Kyle Simpson <getify@gmail.com> wrote: > Is <link rel=preload> going to fire this "loaded" event after it finishes > pre-loading but BEFORE it executes (or, rather, BEFORE because it doesn't > execute them at all)? > <link rel=preload> doesn't execute (you can use it to preload anything), so loaded() fulfills before execution. With <script> loaded() fulfills after execution. > If you want to dynamically *preload* scripts (that is, you don't have > <link rel=preload> tags in your initial page markup) later on in the > lifetime of the page, is the story basically like this? > > Promise.all( > preloadScript("a.js"), > preloadScript("b.js"), > preloadScript("c.js") > ) > .then(function(links){ > return Promise.all.apply(null,links.map(execScript)); > }) > .then(function(){ > alert("All scripts loaded and executed"); > }); > > So, if that's how we think this would work, we need to understand how the > `execScript(..)` logic is going to be treated. Is creating a <script> > element dynamically and inserting it going to make sure that it either: > > a. executes sync > b. executes async, but "a.js" will *definitely* execute before "b.js", > which will *definitely* execute before "c.js". > I'm hoping "a", but you tell me. Do you know what browsers do with a fully cached script? Is there consistency there? If not, yeah, you'll have to create a chain. (btw, Promise.all takes an array, which nicely avoids the .apply stuff) Jake.
Received on Friday, 14 March 2014 21:03:43 UTC