External widgets
  performance
Проблема - внешние
виджеты и скрипты
     Страница виснет на парсинге.
Решение

• Добавление через DOM

• Связывание через
onload/onreadystatechange

• document.write()
   o Делаем свой document.write()

   o Выносим виджет в отдельный

невидимый элемент
   o Загружаем в скрытый iframe,

по onload копируем на страницу
Google Analytics Async
  Snippet
var ga = document.createElement(‘script’);
ga.type = ‘text/javascript’;
ga.async = true;
ga.src = (‘https:’ == document.location.protocol ?
‘https://ssl’ : ‘http://www’) + ‘.google-
analytics.com/ga.js’;var s =
document.getElementsByTagName(‘script’)[0];
s.parentNode.insertBefore(ga, s);
Рабочая модификация
<script>(function(d, s) {
  var js, fjs = d.getElementsByTagName(s)[0], load =
function(url, id) {
     if (d.getElementById(id)) {return;}
     js = d.createElement(s);
     js.src = url; js.id = id;
     fjs.parentNode.insertBefore(js, fjs);
  };
  load('widget1.js', 'fbjssdk');
  load('widget2.js', 'gplus1js');
  load('widget3.js', 'tweetjs');
}(document, 'script'));</script>
Преимущества подхода

• Страница не виснет из-за сторонних виджетов

• Управление всеми сторонними
виджетами из одного места

• Гарантия подключения узла
всего один раз
(благодаря присвоению идентификатора)
External Widgets Performance

External Widgets Performance

  • 1.
    External widgets performance
  • 2.
    Проблема - внешние виджетыи скрипты Страница виснет на парсинге.
  • 3.
    Решение • Добавление черезDOM • Связывание через onload/onreadystatechange • document.write() o Делаем свой document.write() o Выносим виджет в отдельный невидимый элемент o Загружаем в скрытый iframe, по onload копируем на страницу
  • 4.
    Google Analytics Async Snippet var ga = document.createElement(‘script’); ga.type = ‘text/javascript’; ga.async = true; ga.src = (‘https:’ == document.location.protocol ? ‘https://ssl’ : ‘http://www’) + ‘.google- analytics.com/ga.js’;var s = document.getElementsByTagName(‘script’)[0]; s.parentNode.insertBefore(ga, s);
  • 5.
    Рабочая модификация <script>(function(d, s){ var js, fjs = d.getElementsByTagName(s)[0], load = function(url, id) { if (d.getElementById(id)) {return;} js = d.createElement(s); js.src = url; js.id = id; fjs.parentNode.insertBefore(js, fjs); }; load('widget1.js', 'fbjssdk'); load('widget2.js', 'gplus1js'); load('widget3.js', 'tweetjs'); }(document, 'script'));</script>
  • 6.
    Преимущества подхода • Страницане виснет из-за сторонних виджетов • Управление всеми сторонними виджетами из одного места • Гарантия подключения узла всего один раз (благодаря присвоению идентификатора)