2015-07-12 4 views
1

Когда один хочет включить Google Analytics в своем веб-сайте, вот код, он должен включать в себя:Почему код Google Analytics настолько сложный?

<script> 
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 

    ga('create', 'UA-XXXXXX-1', 'auto'); 
    ga('send', 'pageview'); 

</script> 

Почему это не просто

<script src="http://www.google-analytics.com/analytics.js?id=UA-XXXXXX-1" async></script> 

?

ответ

1

Потому что это делает больше, чем это. Но на самом деле, вы могли бы использовать

<script> 
window.GoogleAnalyticsObject = "ga"; 
window.ga = window.ga || function() { 
    if (!window.ga.q) window.ga.q = []; 
    window.ga.q.push(arguments) 
} 
window.ga.l = +(new Date); 
ga('create', 'UA-XXXXXX-1', 'auto'); 
ga('send', 'pageview'); 
</script> 
<script src="http://www.google-analytics.com/analytics.js?id=UA-XXXXXX-1" async></script> 

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

+0

Но первый скрипт может быть во втором, нет? – Arnaud

+1

@Arnaud: Нет, если вы собираетесь синхронно вызывать 'ga()' перед загрузкой скрипта. Это не обязательно для этих двух вызовов 'create' и' send', но IIRC все виды вызовов ga() 'используются на некоторых сайтах, расположенных прямо под сценарием include. 'ga' необходимо немедленно объявить, чтобы начать регистрацию вызовов. – Bergi

+0

Итак, единственная цель - разрешить веб-сайтам делать пользовательские вызовы в Google Analytics? (и поддерживать 10% браузеров, которые не понимают async) – Arnaud

1

Потому что он не блокирует этот путь. Когда браузер загружает страницу, он загружает все ресурсы и скрипты.

С встроенной функцией google он вставляет скрипт после загрузки страницы, поэтому время загрузки страницы не увеличивается.

Кроме того, атрибут async не поддерживается всеми браузерами.

Источник: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#Browser_compatibility

+0

Поддерживается на уровне 90% (http://caniuse.com/#feat=script-async). Если бы это было на 100%, было бы хорошей идеей для Google перейти на мое решение? – Arnaud

+0

Не обязательно, вы все равно должны иметь сценарий для отправки просмотра страницы. Многие люди настраивают свои просмотры страниц для добавления дополнительных данных, таких как тип пользователя. –

Смежные вопросы