JS 和 CSS 的位置对其他资源加载顺序的影响(摘和总结)
JS 和 CSS 在页面中的位置,会影响其他资源(指 img 等非 js 和 css 资源)的加载顺序,究其原因,有三个值得注意的点:
document.write
. 这意味着,在当前 JS 加载和执行完成前,后续所有资源的下载有可能是没必要的。这是 JS 阻塞后续资源下载的根本原因。var width = $('#id').width()
. 这意味着,JS 代码在执行前,浏览器必须保证在此 JS 之前的所有 css(无论外链还是内嵌)都已下载和解析完成。这是 CSS 阻塞后续 JS 执行的根本原因。以上三点可简述为三条基本定律:
总结一下: css下载完成后,js开始下载,最后是资源的下载。
这个结论的context是:js前有css
这个结论旨在讨论:加载顺序和并行性
?
据我估计:渲染整个页面是一个线程。
反证法:
假设:是多个线程,
用例:
?
<head>
? ? <title>test</title>
? ? <script type="text/javascript" src="test.js"></script>
? ? <link rel="stylesheet" type="text/css" href="test.css">
? ? <script type="text/javascript">
? ? </script>
</head>
假设js会控制一个按钮100x100大小
css控制按钮200x200大小
如果是多线程的话,结果将会不可预测。
?
整体来说,还是保持 顺序 执行。具体小细节感觉还有很多,呆日后完善吧。
?
++++
今天看BigPipe的时候想起来js和css不同位置的情况下,会如何执行。因为这个东西会影响BigPipe设计之后的执行细节。
按照我原来的理解,应该是 顺序 执行。谁在前就先执行谁。?
但是没有仔细想doby的执行情况,body和body内的资源的请求情况,以及可能受到的影响。
?
我在chrome下做了些测试,感觉还是要分很多情况来讨论。
?
这篇文章也在讨论这个问题,并做了些总结:
http://hikejun.com/blog/2012/02/02/js%E5%92%8Ccss%E7%9A%84%E9%A1%BA%E5%BA%8F%E5%85%B3%E7%B3%BB/
但结论有些问题,另外,不同的浏览器也会有不同的处理方式。
?
这篇文章给出了一个合理的理论支持!
http://lifesinger.wordpress.com/2012/02/03/performance-impact-of-js-css-loading-order/
但是有些说法不够精致,我就重构了一下~
?
http://futureinhands.iteye.com/blog/354528
这篇文章也可以看看
?
BigPipe的文章和参考
http://www.searchtb.com/2011/04/an-introduction-to-bigpipe.html
?
I
I
I
***本文完毕***I
I
I
?