Как избежать медленной загрузки из-за джаваскриптов

Всякие рекламные системы, в частности, РСЯндекса, МиксМаркет (Контекстный товар) и Бегун, предлагают вставлять свой код через джаваскрипт. Неприятно бывает, когда этот джаваскрипт по каким-либо причинам не грузится или грузится слишком медленно. Как с этим бороться — есть решение.
Обновленное и расширенное решение

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

Итак, внизу страницы, уже после всего контента и таблиц, делаем div (id="mmcontext"), можно невидимый (спрятать его в CSS/overflow:hidden или типа того). В нем вызываем джаваскрипт. А в том месте, куда мы хотим вставить сформированный джаваскриптом блок, вешаем пустой div (id="mmplace").

Теперь пишем простенький джаваскрипт:

<script type="text/javascript">

  1. Забираем в переменную div с сформированным кодом:
    mmcontextdiv=document.getElementById('mmcontext');
  2. Забираем в переменную div, расположенный где надо:
    mmplacediv=document.getElementById('mmplace');
  3. А в самый конец документа дописываем простенькую команду, которая перевесит сформированный джаваскриптом код куда надо:
    mmplacediv.appendChild(mmcontextdiv)

</script>

Код можно укоротить:

<script type="text/javascript">
document.getElementById('mmplace').appendChild(document.getElementById('mmcontext'));
</script>

Вот пример страницы с кодом Контекстного товара МиксМаркета. Яндекс.Директ, Яндекс.Маркет* и Бегун вставляются абсолютно аналогично.

В принципе, вместо div‘ов можно использовать любые теги, а вместо getElementById — другие способы адресации (getElementsByTagName и т. п.). Более того, этот способ, при должной сноровке, может помочь легко втыкать рекламные блоки практически в любое место на сайтах, где очень не хочется влезать в программный код движка.

Комментарии: 11 шт. Добавить »

[+] Алексей :

Спасибо.
Интересно узнать, имеет ли смысл применять данное решение, если на странице несколько джаваскриптов в разных местах? Как может выглядеть код для 4-5 применений джаваскрипта на странице.

Можно и несколько перемещений делать — важно только ID зауникалить.
Типа сначала пара mmplace/mmcontext, потом ydplace/ydcontext, потом bgplace/bgcontext и т. д. Хотя если первый джавасрипт подвиснет, то и остальные не переместятся. То есть чем менее стабильный код, тем ближе к концу его надо вешать.

[+] Владислав :

Хорошая идея, только к сожалению в Firefox почему-то не хочет работать. Можно ли как-то это обойти?

Спасибо!

Ну как так не хочет? Примеры на бочку. 8)

Выяснилось, что сейчас такая штука с Яндексовскими блоками не работают в Опере. Поэтому не рекомендую.

С Бегуном еще проще. Достаточно прописать в “месте показа”, а код запихать подальше :-) .

Ага, там хорошо. Впрочем, у меня уже появилась (еще одна) мысля, как побороть коварный Директ в Опере.

Сам-то Яндекс на своём Народе издавно код рекламы (отображаемой вверху справа) вставляет в самом конце страниц, даже после закрывающего тега html.

[…] я уже писал про методику переноса рекламных блоков. Напишу еще раз — с примерами и прочим. Часть текста […]

[+] Tolik :

Сайт имеет фреймовую структуру. Содержание, для которого нужно вывести контекстную рекламу содержится в одном фрейме.
Хотелось бы поместить рекламный блок в отдельный фрейм внизу сайта.
Как можно это сделать?

Просто во фрейме — нельзя. По правилам необходимо, чтобы код вызывался из того документа (фрейма), в котором есть нормальный контент.
То есть, в принципе, возможно, но надо очень постараться с переносом блоков между фреймами. Надо у толкового джаваскриптера проконсультироваться, и очень рекомендую предварительно согласовать такое размещение с РСЯ. Велик шанс, что могут не пропустить такое.

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

[×]
Показать/Скрыть xHTML-теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>


Рейтинг блогов
8)