Почему Google использует термин «JavaScript, блокирующий рендеринг»?
@jaffa-the-cake спрашивает в комментарии кому-то:
"Какую часть документации вы считаете неверной?"
Давайте возьмем, к примеру, эту документацию:
https://developers.google.com/speed/doc ... BlockingJS
А теперь давайте возьмем, к примеру, то, что они говорят об «отсрочке»:
Загрузка и выполнение скриптов, которые не необходимы для первоначального рендеринга страницы, могут быть отложены до тех пор, пока не завершится первоначальный рендеринг или другие важные части страницы. Это может помочь уменьшить конкуренцию за ресурсы и повысить производительность.
Обратите внимание, что статья посвящена «Удалению JavaScript, блокирующего рендеринг», поэтому слово «может» означает, что вы МОЖЕТЕ использовать отсрочку.
При использовании «defer» в теге сценария вы НЕ будете откладывать «выполнение до тех пор, пока не завершится загрузка первоначального рендеринга страницы». Это может быть так, но не обязательно.
"Отложить" отложит выполнение до тех пор, пока исходный HTML-код не окажется в DOM, но это нечто иное, чем "рендеринг". Выполнение произойдет после того, как (предыдущий) html окажется в DOM и до DOMContentLoaded, но это не означает: «рендеринг страницы завершил загрузку». Было бы правильно, если бы они использовали термин «парсинг HTML страницы завершен».
Пример, подтверждающий изложенную выше теорию:
INDEX.HTML
Код: Выделить всё
Test
Some HTML line and this is above the fold
Код: Выделить всё
// Synchronous delay of 5 seconds
var timeWhile = new Date().getTime();
while( new Date().getTime() - timeWhile < 5000 );
p.s. Без script.js из кеша у браузера будет время завершить рендеринг предыдущего HTML. Сначала необходимо загрузить файл script.js, что дает браузеру дополнительное время. При кэшировании между «завершением синтаксического анализа html» и началом «выполнения javascript» проходит меньше времени, поэтому есть вероятность, что «выполнение javascript» уже начнется до «завершения рендеринга предыдущего html». Таким образом, в случае увеличения скорости вы можете даже рассмотреть возможность отключения кеширования в этом примере, чтобы рендеринг предыдущего HTML-кода был быстрее.
У меня есть гораздо больше тестов/примеров, которые доказывают, что другие части в другой документации (о рендеринге) Google неверны (по моему мнению), но я проясню это в этом посте, используя 1 пример.
Если вы не согласны со мной, пожалуйста, не указывайте только отрицательную репутацию, но хотя бы прокомментируйте, почему вы считаете это неправильным и какой тест вы сделали, чтобы это подтвердить. Я уже пытаюсь убедить некоторых людей в Google, что они, по моему мнению, неправы, но их это как бы обижает. Конечно, я бы не сказал, что они неправильны, если бы я не потратил на это много времени/энергии/тестирования и если бы я был в этом абсолютно уверен. До сих пор мне говорят: «считай, что недоразумение может быть твоим», поэтому я чувствую себя маленьким мальчиком, «бьющимся» с большой стеной. Для меня это не совсем правильно, но я вижу так много людей вокруг меня (они уже много лет работают в сфере ИТ), которые борются с предметным рендерингом, и я могу это понять, потому что документация по этому поводу очень запутанная. Именно поэтому я углубился в это, потому что это также становилось слишком запутанным для меня, поэтому я хотел понять это лучше.
И если я не прав, просто убедите меня аргументами, и я первый, кто скажет, что я был неправ.
Подробнее здесь: https://stackoverflow.com/questions/470 ... bout-defer
Мобильная версия