Почему рекомендуется использовать jQuery.ready, если он такой медленный?

Я уже задавал похожий вопрос, но я так и не изложил свою точку зрения в точности, или, по крайней мере, я думаю, что это настолько актуальный вопрос, что его стоит поднять. это и посмотреть, если кто-нибудь может дать некоторые проницательные мысли.

При использовании jQuery многие из нас используют функцию jQuery.ready для выполнения init после загрузки DOM. Это стало фактически стандартным способом добавления программ манипулирования DOM на веб-страницу с помощью jQuery. Связанное событие существует изначально в некоторых браузерах, но jQuery эмулирует его в других браузерах, таких как некоторые версии IE. Пример:



Все наши тесты показывают, что это событие может быть довольно медленным. Это не так медленно, как window.onload, но все же задержка перед выполнением составляет около 100 мс. Если FF, то может быть до 200-300 мс, особенно при обновлении.

Это очень важные миллисекунды, потому что это количество времени, в течение которого отображается первоначальный макет, прежде чем будут выполнены какие-либо манипуляции с DOM (например, скрытие раскрывающегося списка). Во многих случаях «мерцание» макета в основном вызвано использованием медленного события готовности DOM, что вынуждает программистов скрывать элементы с помощью CSS вместо этого и потенциально делает его менее доступным.

Теперь, если вместо этого мы поместим функцию инициализации в тег script перед закрытием тега body, она будет выполняться намного быстрее, обычно примерно в два раза быстрее, но иногда даже быстрее:








Простая тестовая страница, которая доказывает различия: http://jsbin.com/aqifon/10

Я имею в виду, что мы не говорим о едва заметных различиях, как это продвигает какая-то «полиция оптимизации», когда речь идет об использовании эффективных селекторов. Мы говорим о некоторых больших задержках при выполнении манипуляций с DOM при загрузке. Попробовав этот пример в FF, domready иногда может быть более чем в 100 раз медленнее (300 мс против 2 мс).

Теперь мой вопрос: Почему рекомендуется использовать jQuery.ready, когда он явно намного медленнее других альтернатив? И каковы недостатки вызова init перед закрытием BODY по сравнению с использованием jQuery.ready? Возможно, более «безопасно» использовать domReady, но в каком контексте это более безопасно, чем другой вариант? (Я думаю о таких вещах, как document.write и отложенные скрипты). Мы использовали способ BODY почти 5 лет на многих клиентских сайтах, и у нас никогда не возникало никаких проблем. Это намного быстрее.

Мне также интересно, раз вокруг jsPerf и оптимизация селекторов под пару мс на 10000 исполнений так много шума, почему об этом так мало говорят? По сути, это первая задержка, с которой сталкивается пользователь, и, кажется, довольно просто сократить 50-100 мс при каждой загрузке страницы...

32
задан Community 23 May 2017 в 12:34
поделиться