Примечание: Если вы читаете это в первый раз, вы можете сразу перейти к ОБНОВЛЕНИЮ, поскольку это более точно решает проблему.
Итак, я получил веб-страницу.
В голове у меня есть CSS background-image:
<style>
#foo { background-image:url(foo.gif); }
</style>
Внизу страницы я загружаю свои скрипты:
<script src="jquery.js"></script>
<script src="analytics.js"></script>
Поскольку сценарии расположены внизу страницы, а CSS - вверху страницы, я предположил, что браузеры сначала загрузят изображение. Однако, похоже, что это не так.
Это скриншот из Chrome Dev Tools:
http://www.vidasp.net/media/cssimg-vs-script.png
Как видите, изображение загружается после сценариев.
(Вертикальная синяя линия - это событие загрузки страницы DOMContentLoaded. Огромный разрыв в 45 мс - это время, в которое Chrome анализирует исходный код jQuery.)
Теперь мой первый вопрос:
Это стандартное поведение в браузерах? Всегда ли CSS background-images загружаются после всех скриптов на странице?
Если да, как я могу убедиться, что эти изображения загружаются перед сценариями? Есть ли простое и удобное решение этой проблемы?
ОБНОВЛЕНИЕ
Я сделал контрольный пример. Это исходный код 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
Chrome демонстрирует проблему, которая заставила меня написать этот вопрос в первую очередь. Сценарии запрашиваются перед изображениями.
ОПЕРА (11)
http://www.vidasp.net/media/loadorder-results/opera1.png
http://www.vidasp.net/media/loadorder-results/opera2.png
Как и Firefox, Opera тоже делает все правильно . :D
Подводя итог:
- Firefox и Opera запрашивают ресурсы по мере их появления в исходном коде.
Исключения, поэтому это правило:
- Internet Explorer запрашивает CSS background-images последний
- Chrome запрашивает сценарии перед изображениями, даже если сценарии появляются позже в исходном коде
Теперь, когда я изложил проблему, позвольте мне перейти к моему вопросу:
Как заставить IE и Chrome запрашивать
изображения перед сценариями?