Ответ 1
Все это связано с этой записью в bugzilla: https://bugzilla.mozilla.org/show_bug.cgi?id=364315
В этой записи Андерс Холбёлл предложил:
Кажется, что, столкнувшись с script -tag, ссылающимся на внешний файл, браузер не пытается загрузить какие-либо элементы после script -tag, пока загружаются внешние файлы script. Это делает сайты, ссылающиеся на несколько или большие файлы javascript, медленно.
...
Здесь сначала будет загружен файл file1.js, а затем последовательно file2.js. затем img1.gif, img2.gif и file3.js будут загружаться одновременно. Когда file3.js имеет загружен полностью, img3.gif будет загружен.Можно утверждать, что поскольку js файлы могут содержать, например, строку типа "
document.write('<!--');
", нет никакого способа узнать, содержит ли какой-либо контент после script -tag когда-либо будет показано, до выполнения script.Но я бы предположил, что гораздо более вероятно, что контент будет показан чем нет. И в эти дни довольно часто страницы ссылаются на многие внешние javascript файлы (ajax-библиотеки, статистика и реклама), которые с текущим поведением вызывает сериализацию страницы.
Таким образом, анализатор html продолжает читать через html файл и загружать ссылки, даже если он заблокирован от рендеринга из-за script.
Он называется "умозрительным", потому что script может делать такие вещи, как установка параметров css, таких как "display: none
" или комментирование разделов следующего html, и тем самым сделать ненужным загрузку certian... Однако в 95% -ный прецедент, большинство ссылок будут загружены, поэтому парсер обычно правильно угадывает.