I have read that it is not recommended to instantiate jQuery multiple times in your HTML. This makes perfect sense to me, but:
Isn’t Javascript single-threaded anyway? And leaving jQuery behind, how does the browser execute these multiple script tags? In parallel or one after another?
Thanks, Philip
Simple answer:
In a simple scenario (tags are part of original HTML text), the browser definitely executes them one after another.
Detailed discussion with different caveats
JavaScript isn’t necessarily single-threaded (it depends on the implementation of your JavaScript engine, e.g. see Web Workers).
BUT, the individual
<script>tags are executed sequentially.For reference, please see
JavaScript: The Definitive Guide. Quoting Chapter “12.3. Execution of JavaScript Programs”:Please note that the above is only true of “straight up” execution of code in tags. The order can, however, be affected by:
setTimeout()calls (duh)defer attribute
Dynamic attachement of the
<script>tags – see the last section of this answer.As a caveat, please note that JavaScript code loaded externally via
<script src="xxxx" />would still be executed sequentially, BUT, it is quite possible that the browser would DOWNLOAD the code in parallel – depends on browser implementation (but still schedule the execution of downloaded code snippets in correct order).This caveat is important in case you want to have some weird hack whereas the URL for the JavaScript source is actually a CGI script which does something and you try to depend on the correct order of downloads for the logic in the script.
Again, it would have no bearing on your browser JS engine’s execution order of those script pieces.
However, a far more important caveat is that if you actually attach the
<script>tags with external sources dynamically (e.g. viaappendChild()call), according to this SO post, as well as the MSDN blog the post was based on, non-IE browsers do NOT guarantee the order of execution! It will depend on which tag’s code finished downloading first!