Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Готовность HTML кода (https://javascript.ru/forum/misc/2231-gotovnost-html-koda.html)

no_alex 25.11.2008 02:42

Готовность HTML кода
 
Привет всем!

Такая задача:
  • JavaScript загружается в <head>...</head> но не активируется.
  • Надо активировать (запустить выполнятся) этот скрипт в тот момент, когда HTML код полностью сформирован

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

Как вариант я пробовал вставлять активирующий JavaScript-код непосредственно перед закрывающим тегом </body>. Этот вариант срабатывает, но мне очень хотелось-бы "уйти" от этого дополнительного активирующего кода. Желательно, чтобы весь скрипт целиком располагался в <head>...</head>.

Решаема такая задача?

Kolyaj 25.11.2008 09:13

Цитата:

Сообщение от no_alex
Желательно, чтобы весь скрипт целиком располагался в <head>...</head>.

Откуда такое жесткое условие?

Как минимум два плюса от подключения js в конце файла:
1. Пользователь сразу грузит полезный ему контент, а не ждет, пока загрузится бесполезный в данный момент JavaScript.
2. Не нужны никакие onload.

Цитата:

Сообщение от no_alex
Решаема такая задача?

Решаема конечно. http://webo.in/articles/habrahabr/05-delayed-loading/ Вот только нужно ли столько усилий ради непонятного желания разместить скрипт в head, если у вас не универсальная библиотека, которая должна работать при любых условиях.

Ну и, разумеется, данное событие есть во всех современных фреймворках.

no_alex 25.11.2008 12:51

Kolyaj,
Спасибо огромное!
Это именно то, что я искал.

Цитата:

Вот только нужно ли столько усилий ради непонятного желания разместить скрипт в head, если у вас не универсальная библиотека, которая должна работать при любых условиях.
Да. Тут у меня есть определенная специфика. Часть скрипта должна выполниться до формирования HTML-кода, а часть после.

Цитата:

Пользователь сразу грузит полезный ему контент, а не ждет, пока загрузится бесполезный в данный момент JavaScript.
Ждать ему придется только при первом заходе на сайт. При дальнейшем серфинге скрипт уже будет браться из кэша. ;)
И если юзер работает через прокси, то с определенной долей вероятности, ему почти не придется ждать и при первом заходе.

Octane 25.11.2008 12:54

Скрипты, подключенные в теле документа, визуально тормозят загрузку страницы, особенно если в верстке использовалось абсолютное позицонирование, для прибивания футера к низу или поднятия бесполезного для поисковиков, но необходимого пользователю контента в вверх. Используйте событие DOMContentLoaded и его эмуляцию для старых браузеров и ИЕ, которая займет не более десяти строк, но даст больший эффект, чем подключение скрипта до </body>, к тому же в некоторых браузерах, вы не сможете работать с document.body, подключив скрипт до до </body>. Сделайте себе универсальный загрузчик DOMContentLoaded.

Kolyaj 25.11.2008 13:25

Цитата:

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

Т.е. скрипты, подключенные в head не тормозят?

Octane 25.11.2008 13:37

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

Kolyaj 25.11.2008 13:45

Octane,
какие-то странные у вас аргументы.

Цитата:

Сообщение от Octane
тормозя закрытие тега <body>

Скрипт, подключенный в head, будет тормозить открытие body.
Цитата:

Сообщение от Octane
станица начинает дергаться

Скрипт подключается последним, ничего не дергается, и ничего никого не тормозит.

Octane 25.11.2008 14:15

Перед открытием боди станица еще не видна.

Kolyaj 25.11.2008 14:29

А перед закрытием все уже видно, и всем можно пользоваться, и ничего не нужно ждать.

no_alex 25.11.2008 15:06

Octane,
Я кажется понял Вашу мысль.
Сегодня попробую проделать пару экспериментов чтобы проверить то, о чем Вы говорите.

no_alex 25.11.2008 15:19

Кстати, по поводу "времени загрузки".

ИМХО, время "диалапной работы в Интернет" уже давно прошло и сейчас ключевым моментом, действительно становится не "время загрузки", а правильное (красивое) отображение (формирование) кода.

Kolyaj 25.11.2008 15:33

Цитата:

Сообщение от no_alex
время "диалапной работы в Интернет"

Пришло время gprs-ной работы в интернет. И есть ли жизнь за МКАДом? Когда мне какое-то время пришлось сидеть на gprs, я вспоминал всех родственников многих вебмастеров. Те, кто говорит, что
Цитата:

Сообщение от no_alex
сейчас ключевым моментом, действительно становится не "время загрузки", а правильное (красивое) отображение (формирование) кода.

просто сознается в том, что не может сделать и красиво, и быстро, и удобно.

no_alex 25.11.2008 16:04

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

И второй вопрос - какой процент посетителей на сайте будет заходить через GPRS, чтобы на них сильно ориентироваться? Если большой, то есть смысл сделать две версии сайта "www" (навороченную) и "wap" (облегченную).
А если процент потенциальных GPRS-посетителей малый, то не стоит сильно тратить средства на адаптацию под этих посетителей, они и так уже привыкли что у них все тормозит. ;)

И потом GPRS уже тоже начинает отходить на задний план. Сейчас уже набирают популярность более скоростные протоколы.

Kolyaj 25.11.2008 16:34

А что сложного в том, чтобы JavaScript грузить в последний момент, т.к. он может и не понадобиться? Тем более того же JavaScript'а писать меньше.

Octane 25.11.2008 16:38

GPRS/EDGE живее всех живых и еще не скоро пропадет, WAP не значит GPRS и то, что пользователи будут заходить на сайт с телефона. Множество пользователей, которые не могут воспользоваться ADSL или каким-то другим видом доступа в Интернет, а также пользователи ноутбуков повседневно используют GPRS/EDGE (если повезет то 3G) для полноценного доступа в интернет, и их становится все больше и больше с появлением недорогих безлимитных тарифов.

no_alex 25.11.2008 16:52

Цитата:

А что сложного в том, чтобы JavaScript грузить в последний момент, т.к. он может и не понадобиться? Тем более того же JavaScript'а писать меньше.
Лично для меня необходимо универсальное решение, позволяющее выполнять часть задач до формирования кода, а часть после.
Кроме того, возможно, для меня актуальными будут проблемы описанные Octane. А разница в размере JavaScript-кода будет практически не ощутимая.

Octane,
Целиком с Вами согласен. Я и не говорил, что GPRS умер, я сказал что он уже постепенно вытесняется другими протоколами и процесс этот идет весьма активно. Под WAP я подразумевал "облегчённую" версию сайта и это не обязательно для мобильных устройств.


Часовой пояс GMT +3, время: 11:15.