Как ускорить запуск javascript?

SDaniL аватар
5

Доброго дня!
Столкнулся с такой проблемой:

На сайте содержится достаточное количество скрытых диалоговых окон, предназначенных для интерактивного взаимодействия с пользователем. Естественно, вывод этих окон требует наличия js.
Также каждая страница содержит Гугловскую рекламу, кое-что от Яндекса и, конечно же, счетчики Li и Top. Все это безобразие загружается после основного контента!

Суть: При загрузке страницы каждый подгружаемые с посторонних сайтов модули немного, но увеличивают время загрузки страницы в целом. Вследствие DOM модель страницы формируется, порой, очень долго... 5-10 сек, за это время пользователи уже пробуют кликать или взаимодействовать со страницей, что приводит к печальному результату, а именно - не работающим JS и не реагирующими ссылками.

Вопрос: Возможно ли запускать сценарии JS до полного формирования DOM или взаимодействовать средствами Ява на еще не до конца сформированную страницу?

В голову приходит мысль изначально прописывать простые ссылки на статичные страницы, а затем средствами Ява делать коррекцию. Это позволит немного снизить негатив от "не работающих ссылок", но проблему не решит =(

Какие могут быть варианты?

Дима аватар
405

Вот что нашел http://yuiblog.com/blog/2008/07/22/non-blocking-sc... (раздел "Non-blocking scripts"), может помочь.

Вообще здесь вряд ли есть серебряная пуля. От какого-то js можно отказаться. Например, посмотреть, чьи скрипты грузятся дольше всего.

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

Кстати, скрипты желательно вынести еще ниже, непосредственно к </body>. Может помочь.

"SDaniL" писал(а):
В голову приходит мысль изначально прописывать простые ссылки на статичные страницы, а затем средствами Ява делать коррекцию.

Считается, что если сайт не работает с выключенным js, это не очень хорошо. Что принципиально изменится, если форму добавления объявления сделать на отдельной странице, а не в окне?

SDaniL аватар
5

"Дима" писал(а):
Кстати, скрипты желательно вынести еще ниже, непосредственно к . Может помочь

Кроме этого из статьи ничего не понял... особенно про динамическое вписывание сценариев в head ... Ты понял как это работает?

riddi аватар
54

Херня это все. Чтобы страница долго не грузилась не надо её "грузить" и все. Правда для этого необходимо серьезно подойти к разработке клиентского ПО для своих сайтов. А это мало кто делает. Абсолютное большинство владельцев сайтов налепит лепуху и удивляется почему скрипты не успевают за пользователем. Многие "разработчики" на JQuery не знают всех её возможностей и дублируют функционал, который уже предусмотрен фреймворком. В итоге получаются кривые плагины, которые владельцы сайтов с восторженным воплем "дааа!!! То, что надо!!!" немедленно водружаются себе.

По существу: прежде всего уберите лишние элементы из DOM. Все окна сделайте динамическими подгружаемыми одной единственной функцией. Постарайтесь избегать использовать обработчик onload без надобности. Запускайте скрипты в той последовательности, в которой у вас загружается страница. Примерно структура должна быть такой:
- Загружаем фреймворк если он есть (например jquery)
- Загружаем специально написанную для сайта функцию для загрузки контента и скриптов.
- Загружаем контент
- Обработчики контента (без onload)
- Счетчики
- Реклама

Дима аватар
405

"SDaniL" писал(а):
Ты понял как это работает?

var js = document.createElement('script');
js.src = 'myscript.js';
var head = document.getElementsByTagName('head')[0];
head.appendChild(js);

 

Ссылки на некотрые js-скрипты можно добавлять при помощи js. Так можно контролировать порядок загрузки. Причем js начнет исполняться до того, как все скрипты будут подгружены.

Правда не знаю, есть ли подводные камни у этого трюка.

SDaniL аватар
5

Хмм... надо поразмыслить... а DOM должен быть закончен?