注意:如果您第一次阅读本文,您可以直接跳转到UPDATE,因为它可以更准确地解决问题。如何让浏览器(IE和Chrome)在脚本之前请求图像?
所以我有一个网页。
在脑子里,我有一个CSS背景图像:
<style>
#foo { background-image:url(foo.gif); }
</style>
在页面的底部,我打开我的脚本:
<script src="jquery.js"></script>
<script src="analytics.js"></script>
由于脚本位于的底部页面和页面顶部的CSS,我假设浏览器将首先加载图像。但是,这似乎并非如此。
这是从Chrome浏览器开发工具的截图:
http://www.vidasp.net/media/cssimg-vs-script.png
正如你所看到的,脚本后的图像加载。 (垂直蓝线是页面加载 DOMContentLoaded事件的巨大45ms的差距是在浏览器解析jQuery的源代码的时间。)
现在,我的第一个问题是:
这是标准在浏览器中的行为?在页面上的所有脚本之后,CSS背景图像是否始终加载?
如果是的话,我如何确保这些图像在脚本之前加载?有没有一个简单和方便的解决这个问题?
UPDATE
我制成的测试用例。这是HTML源代码:
<!DOCTYPE html>
<html>
<head>
<style> body { background-image: url(image1.jpg) } </style>
</head>
<body>
<div> <img src="image2.jpg"> </div>
<script src="http://ajax.googleapis.com/ajax/.../jquery.min.js"></script>
<script src="http://vidasp.net/js/tablesorter.js"></script>
</body>
</html>
正如你所看到的,我有一个CSS背景图像,一个常规图像和两个脚本。而现在的结果:
INTERNET EXPLORER(9测试版)
http://www.vidasp.net/media/loadorder-results/ie2.png
http://www.vidasp.net/media/loadorder-results/ie1.png
Internet Explorer的要求定期形象第一,然后是两个脚本,和CSS图像最后 。
FIREFOX(3.6)
http://www.vidasp.net/media/loadorder-results/firefox2.png
http://www.vidasp.net/media/loadorder-results/firefox1.png
Firefox是这样做的权利。所有资源都按它们在HTML源代码中出现的顺序进行请求。
铬(最新的稳定)
http://www.vidasp.net/media/loadorder-results/chrome2.png
http://www.vidasp.net/media/loadorder-results/chrome1.png
铬表明,让我写在首位这一问题的问题。在图像之前请求脚本。
OPERA(11)
http://www.vidasp.net/media/loadorder-results/opera1.png
http://www.vidasp.net/media/loadorder-results/opera2.png
如Firefox,歌剧院做是正确的,也。 :D
综上所述:
- Firefox和Opera所请求的资源,因为它们出现在源代码中。
异常,所以这条规则:
- Internet Explorer的请求CSS背景图像持续
- 即使脚本出现在源代码
后来的Chrome请求脚本的图像前
现在我列出了这个问题,让我继续我的问题:
如何在脚本之前让IE和Chrome请求 图片?
“这是浏览器的标准行为吗?”是的,它是更糟糕的CSS背景IMG上:悬停 – Knu 2011-01-20 05:17:36
如果我可以,我想问一个反问:是什么原因是很重要的是脚本/图像按特定的顺序加载?大多数情况下,我很好奇,如果有一个潜在的问题,改变订单为您解决。 – zzzzBov 2011-01-20 19:58:35
@zzzzBov我想尽可能快地要求图像,因为这意味着,游客将看到他们越快。显然,让图像更快显示在屏幕上是件好事。 – 2011-01-20 20:02:21