<div class="gmail_quote">On Wed, Sep 30, 2009 at 9:59 PM, Darin Fisher <span dir="ltr">&lt;<a href="mailto:darin@chromium.org">darin@chromium.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="gmail_quote"><div><div></div><div class="h5">On Wed, Sep 30, 2009 at 1:36 AM, Jonas Sicking <span dir="ltr">&lt;jonas@sicking.cc&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

There&#39;s two things that I don&#39;t understand about the &#39;async&#39; attribute<br>
on &lt;script&gt; elements:<br>
<br>
First of all, why is the parser responsible for executing scripts on<br>
the &quot;list of scripts that will execute asynchronously&quot;, as defined by<br>
[1]? It would seem simpler to always perform the steps defined further<br>
down, no matter if the document is still being parsed or not. This is<br>
mostly an editorial issue, but actually seems to make a slight<br>
behavioral difference. Right now if a document contains two async<br>
scripts, the tokenizer must always run one step between the execution<br>
of the two. I.e. This doesn&#39;t seem like a particularly desirable, nor<br>
testable, behavior. It&#39;s also really painful to implement if the<br>
tokenizer is running on a separate thread. Same thing applies to the<br>
&quot;list of scripts that will execute as soon as possible&quot;.<br>
<br>
Second, why are async scripts forced to run in the order they appear<br>
in the markup? I thought the whole idea of the async attribute was to<br>
run the scripts as soon as possible, while still not blocking parsing.<br>
This leads to weird situations like if a document contains the<br>
following markup:<br>
<br>
&lt;!DOCTYPE html&gt;<br>
&lt;html&gt;<br>
  &lt;head&gt;<br>
    &lt;title&gt;...&lt;/title&gt;<br>
    &lt;script src=&quot;make-tables-sortable.js&quot;&gt;&lt;/script&gt;<br>
    &lt;script src=&quot;analytics.js&quot; async&gt;&lt;/script&gt;<br>
  &lt;/head&gt;<br>
  &lt;body&gt;...&lt;/body&gt;<br>
&lt;/html&gt;<br>
<br>
In this example, if the first script is changed from being a &quot;normal&quot;<br>
script (as above), to being a async script, that could lead to the<br>
analytics script actually executing later.<br></blockquote><div><br></div></div></div><div>Did you perhaps mean to say &quot;if both scripts are changed to being async&quot;?</div><div><br>If not, then I&#39;m confused because you prefaced this example with &quot;why are async</div>
<div class="im">
<div>scripts forced to run in the order they appear in the markup?&quot;</div><div><br></div></div><div>I agree that normal scripts should not be deferred behind async scripts that</div><div>happen to be listed before the normal scripts.  I don&#39;t think that is the intent</div>

<div>of the async script spec.</div><div><br></div><font color="#888888"><div>-Darin</div></font><div class="im"><div><br></div></div></div></blockquote><div><br></div><div>D&#39;oh, ignore me.  I overlooked the &quot;async&quot; attribute on the second &lt;script&gt; tag.</div>
<div><br></div><div>Anyways, I agree with you.  Forcing the scripts to run in the order they are listed</div><div>seems to defeat the purpose of the async attribute.</div><div><br></div><div>I&#39;m guessing it was spec&#39;d this way to minimize problems that could occur if there</div>
<div>were any dependencies between the scripts.</div><div><br></div><div>-Darin</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="gmail_quote">
<div class="im"><div></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
I thought the purpose of the async attribute was to avoid people<br>
having to do nasty DOM hacks in order to increase pageload<br>
performance, but this makes it seem like such hacks are still needed.<br>
<br>
What is the use case for the current behavior?<br>
<br>
[1] <a href="http://www.whatwg.org/specs/web-apps/current-work/?slow-browser#when-a-script-completes-loading" target="_blank">http://www.whatwg.org/specs/web-apps/current-work/?slow-browser#when-a-script-completes-loading</a><br>


<font color="#888888"><br>
/ Jonas<br>
</font></blockquote></div></div><br>
</blockquote></div><br>