Название получилось довольно громкое На самом деле эта статья не об устранении задержек, а скорее об изменении порядка загрузки и выполнения JS скриптов. Но с точки зрения посетителя некоторые задержки действительно исчезнут, точнее они будут там где он ожидает их увидеть Я как-то путано рассказываю , на самом деле все довольно просто. Недавно на почтовом сервере ukr. net (в web интерфейсе) я заметил довольно неприятный баг. Загружается web интерфейс, я кликаю по письму и вместо сообщения «Загрузка данных…» вижу «Для просмотра письма включите поддержку JavaScript в браузере и перезагрузите страницу». Естественно, я точно знаю, что JavaScript у меня включен и перезагружать ничего не стал. Через две-три секунды сообщение исчезло и на его месте появилось письмо. Работу скриптов ukr. net я анализировать не стал, но в общем-то о причине можно догадаться.
Скорее всего, возникла задержка при загрузке JS файла со скриптом, который должен изменять «Включите JS…» на «Загрузка данных..». Раньше я этот момент не замечал, но у меня нет ограничений по скорости на UA-IX трафик, да и сам ukr. net стабильно работает. Тем не менее, проблема со скоростью загрузки существует и касается всех, а не только крупных порталов. Рассмотрим реальную ситуацию. Нужно создать страничку на которой часть данных подгружается ajax запросом. При этом, хотелось бы использовать какую-нибудь библиотеку вроде jQuery. И, конечно, нужно чтобы посетители с отключенным JavaScript видели соответствующие сообщения. Если решать задачу «в лоб», то сразу же получим проблему с задержками. Как ни крути, но на загрузку библиотеки какое-то время уйдет (установка соединения плюс сама загрузка).
Сообщение «Включите JavaScript…» должно быть вставлено в тело страницы, потому что иначе посетитель с отключенным JS его не увидит. Поэтому, если код, который убирает это сообщение будет ждать окончания загрузки библиотеки, то какое-то время сообщение будет висеть и путать посетителей с включенным JS. С другой стороны, нам ведь не обязательно использовать библиотеку для того, чтобы изменить текст в одном из блоков на странице Т. е. мы можем разбить JS код на две части. Первая – убирает сообщения «Включите JavaScript…» (эта часть не должна использовать никаких библиотек и должна выполняться прежде всего). Вторая – выполняет всю остальную работу. Подключать эти скрипты нужно после скриптов библиотек. Взгляните на следующий пример.