Ответ 1
Любые идеи, почему это не обсуждается/рекомендуется чаще?
Размещение JavaScript непосредственно перед </body>
обсуждалось много, и, как вы знаете, рекомендуется, если вы ищете более быструю загрузку страницы. В действительности, запуск jQuery ready
обработчиков вручную недостаточно обсуждается. Зачем? Ну, я не думаю, что есть один объективный ответ на этот вопрос, но я попытаюсь описать некоторые возможности здесь:
-
Производительность не является главной целью jQuery (хотя это определенно вызывает озабоченность), а уроды производительности обычно ищут более легкие библиотеки для кросс-браузерных манипуляций DOM и обработки событий, или roll их.
-
Это дополнительный шаг, и он не выглядит чистым. jQuery пытается быть чистым и элегантным, и рекомендуя дополнительный шаг для инициализации скриптов, не похоже на то, что произойдет. Они рекомендуют привязываться к
ready
, поэтому рекомендуется принудительно использовать.ready()
и игнорировать фактическое событие браузера выглядит "неправильно". Кто бы ни беспокоился об этом, вероятно, знает, что инициализация скриптов прямо перед</body>
выполняется быстрее. -
Оптимизация
DOMContentLoaded
звучит как задача для поставщиков браузеров. Я не уверен, почему это медленнее, и, возможно, там не так много места для оптимизации – в моем понимании, вызов сценариев init перед</body>
всегда должен быть самым быстрым способом инициализации материала (поскольку он выполняется сразу при разборе тега контейнера<script>
, в то время как браузеры должны завершить синтаксический анализ всего файла перед запускомDOMContentLoaded
).
Вероятно, вы помните, что не так давно было обычной практикой иметь <script>
блоки, разбросанные повсюду в HTML. Затем появилось движение Web Standards, и он рекомендовал более разумные и способные делать вещи. Это включало скрипты загрузки из одного места – первоначально, window.onload
, который тогда считался проблематичным для того, чтобы быть медленным, тогда DOMContentLoaded
и его эмуляции для IE8 и ниже. Тем не менее, мы по-прежнему видим спагетти-HTML со сценариями повсюду ежедневно на StackOverflow. Поэтому я не уверен, что рекомендовать размещение сценариев до конца тела является хорошим звонком сегодня, потому что его можно интерпретировать как лицензию на добавление скриптов в любом месте тела.
Наконец, если вы действительно обеспокоены загрузкой script быстро, а ваш код не манипулирует DOM, самый быстрый способ загрузить его - поместить его в <head>
перед любыми таблицами стилей. И я заявляю, что просто сказать, что нет серебряной пули, нет оптимального способа запуска сценариев, который является самым быстрым и элегантным в каждом сценарии. Я думаю, что почему сообщество придерживается рекомендации, которая выглядит разумно и имеет тенденцию создавать более удобный код, а не другие более эффективные альтернативы.