Используя DOMContentReady рассмотрел антишаблон Google

Член команды библиотеки Google Closure утверждает, что ожидание события DOMContentReady является плохой практикой.

Рассказ - то, что мы не хотим ожидать DOMContentReady (или хуже событие загрузки), так как это приводит к плохому пользовательскому опыту. UI не является быстро реагирующим, пока весь DOM не был загружен из сети. Таким образом, предпочтительный путь состоит в том, чтобы использовать встроенные сценарии как можно скорее.

Так как они все еще не предоставляют больше подробную информацию об этом, поэтому интересно, как они имеют дело с Операцией Прерванное диалоговое окно в IE. Это диалоговое окно является единственной критической причиной, которую я знаю для ожидания DOMContentReady (или загрузка) события.

  1. Вы знаете какую-либо другую причину?
  2. Как Вы думаете, что они занимаются той проблемой IE?

21
задан thorn̈ 17 October 2013 в 12:42
поделиться

5 ответов

Сначала немного объяснения: точка с Inline JavaScript - включить его как можно скорее. Однако это «возможно» зависит от узлов DOM, которые требуют объявления сценария. Например, если у вас есть несколько навигационного меню, который требует JavaScript, вы включите скрипт сразу после определения меню в HTML.

<ul id="some-nav-menu">
    <li>...</li>
    <li>...</li>
    <li>...</li>
</ul>
<script type="text/javascript">
    // Initialize menu behaviors and events
    magicMenuOfWonder( document.getElementById("some-nav-menu") );
</script>

Пока вы обращаетесь только к узлам DOM, которые вы знаете, были объявлены, вы не будете работать в недоступности DOM. Что касается выпуска IE, разработчик должен стратегически включать в себя свой скрипт, чтобы это не произошло. Это не совсем это большая проблема, и не трудно обратиться. Настоящая проблема с этим - это «большая картинка», как описано ниже.

Конечно, все имеет плюсы и минусы.

PORES

  1. Как только элемент DOM отображается пользователю, какую бы функциональность, которая добавляется к нему JavaScript, практически не сразу доступна (вместо того, чтобы ждать всю страницу для загрузки).
  2. В некоторых случаях Pro # 1 может привести к более быстрому воспринимаемую время загрузки страницы и улучшенного пользовательского опыта.

Минусы

  1. В худшем случае вы смешиваете презентацию и бизнес-логику, в лучшем случае вы смешиваете ваш скрипт , включает в себя по всей вашей презентации, оба из которых могут быть сложными для управления. Ни одна не принимается на мой взгляд, а также большой частью сообщества.
  2. Как указал век .

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

Это нормально для других людей использовать его? Разработчики собираются делать то, что они хотят / должны получить работу и сделать своих клиентов / боссов / отдел маркетинга счастливыми. Есть компромиссы, а до тех пор, пока вы понимаете и управляете им, вы должны быть в порядке в любом случае.

29
ответ дан 29 November 2019 в 21:24
поделиться

Одна из причин избегать встроенных скриптов заключается в том, что для этого необходимо разместить перед ними любые библиотеки зависимостей в документе, что, вероятно, сведет на нет прирост производительности встроенных скриптов. Лучшая практика, с которой я знаком, это размещение всех скриптов (в одном запросе HTTP!) в самом конце документа, непосредственно перед . Это потому, что загрузка скриптов блокирует текущий запрос и все суб-запросы до тех пор, пока сценарий полностью загружен, разобран и выполнен.

Короткая волшебная палочка, мы всегда должны сделать эти компромиссы. К счастью, сам HTML-документ все чаще становится наименее ресурсоемким запросом (если только вы не делаете глупостей вроде огромных данных: URL и огромных встраиваемых SVG-документов). Для меня компромисс в ожидании конца HTML-документа кажется наиболее очевидным выбором.

.
0
ответ дан 29 November 2019 в 21:24
поделиться

Вероятно, это потому, что Google не заботится о том, что у вас нет Javascript, он нужен им практически для всего, что они делают. Если Вы используете Javascript в качестве дополнения к уже функционирующему сайту, то загрузка скриптов в DOMContentReady просто замечательная. Смысл в том, чтобы использовать Javascript для повышения удобства работы пользователя, а не для того, чтобы изолировать его, если у него его нет.

-1
ответ дан 29 November 2019 в 21:24
поделиться

Я думаю, что этот совет не очень полезен. DOMContentReady может быть плохой практикой только потому, что в настоящее время он чрезмерно используется (возможно, из-за простого в использовании готового события jquery). Многие используют его как событие "запуска" для любого действия javascript . Хотя даже событие jQuery's ready() предназначалось только для использования в качестве точки запуска для манипуляций с DOM.

Лучше всего, манипуляции с DOM при загрузке страницы приводят к плохому опыту пользователя!!! Так как они не нужны , серверная сторона могла просто полностью сгенерировать начальную страницу.

Так что, может быть, члены команды закрытия просто пытаются вести в обратном направлении, и не дают людям вообще выполнять манипуляции с DOM при загрузке страницы?

0
ответ дан 29 November 2019 в 21:24
поделиться

Самая большая проблема с инлайн-скриптами заключается в том, что их нельзя правильно кэшировать. Если все ваши скрипты хранятся в одном js-файле, который минифицирован (с помощью компилятора), то этот файл может быть кэширован браузером только один раз для всего сайта.

Это приводит к улучшению производительности в долгосрочной перспективе, если ваш сайт имеет тенденцию быть загруженным. Еще одним преимуществом наличия отдельного файла для скриптов является то, что вы стараетесь не "повторяться" и объявляете как можно больше многократно используемых функций. DOMContentReady не приводит к плохому пользовательскому опыту. По крайней мере, он предоставляет пользователю контент заранее, а не заставляет его ждать загрузки пользовательского интерфейса, что в конечном итоге может стать для него неприятным фактором.

Также использование встроенных скриптов не гарантирует, что пользовательский интерфейс будет более отзывчивым, чем при использовании DOMContentReady. Представьте себе сценарий, в котором вы используете встроенные скрипты для выполнения вызовов ajax. Если у вас одна форма для отправки, то все в порядке. Если у вас несколько форм, вы будете повторять вызовы ajax, а значит, повторять один и тот же сценарий каждый раз. В итоге это приводит к тому, что браузер кэширует больше кода javascript, чем если бы он был разделен в js-файле, загружаемом, когда DOM готов.

Еще один большой недостаток встроенных скриптов заключается в том, что вам нужно поддерживать две отдельные базы кода: одну для разработки, а другую для производства. Вы должны убедиться, что обе базы кода поддерживаются синхронно. Версия для разработки содержит неминифицированную версию вашего кода, а версия для производства содержит минифицированную версию. Это большая головная боль в цикле разработки. Вам приходится вручную заменять все фрагменты кода, спрятанные в громоздких html-файлах, на минифицированную версию, а также надеяться, что код не сломается! Однако при сохранении отдельного файла во время цикла разработки, вам просто нужно заменить этот файл скомпилированной минифицированной версией в производственной кодовой базе.

Если вы используете YSlow, вы увидите, что:

Использование внешних JavaScript и CSS обычно приводит к ускорению работы страниц потому что эти файлы кэшируются браузером. JavaScript и CSS, которые вставлены в HTML-документы, загружаются загружаются каждый раз, когда HTML-документ запрашивается. Это уменьшает количество HTTP-запросов, но увеличивает размер HTML-документа. С другой стороны, если JavaScript и CSS находятся во внешних файлах, кэшируемых браузером, размер HTML-документа уменьшается без увеличения количества HTTP запросов.

Я могу поручиться за встроенные скрипты, если и только если код меняется так часто, что его наличие в отдельном js-файле несущественно и в конечном итоге будет иметь такое же влияние, как и эти встроенные скрипты. Тем не менее, эти скрипты не кэшируются браузером. Браузер может кэшировать скрипты только в том случае, если они хранятся во внешнем js-файле с etag.

Однако это не JQuery против Google closure в любом случае. У закрытия есть свои преимущества. Однако библиотека closure затрудняет размещение всех ваших скриптов во внешних файлах (хотя это не то чтобы невозможно, просто затрудняет). Вы просто склонны использовать встроенные скрипты.

1
ответ дан 29 November 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: