Created
August 9, 2021 00:44
-
-
Save banochkin/d136cf492f77cab9f603bf2b008515a9 to your computer and use it in GitHub Desktop.
Delayed code download
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function() { | |
'use strict'; | |
// Флаг, что Метрика уже загрузилась. | |
var loadedScript = false, | |
// Ваш идентификатор сайта в Яндекс.Метрика. | |
metricaId = 14881488, | |
// Переменная для хранения таймера. | |
timerId; | |
// Для бота Яндекса грузим Метрику сразу без "отложки", | |
// чтобы в панели Метрики были зелёные кружочки | |
// при проверке корректности установки счётчика. | |
if (navigator.userAgent.indexOf('YandexMetrika') > -1) { | |
loadScript(); | |
} else { | |
// Подключаем Метрику, если юзер начал скроллить. | |
window.addEventListener('scroll', loadScript, { | |
passive: true | |
}); | |
// Подключаем Метрику, если юзер коснулся экрана. | |
window.addEventListener('touchstart', loadScript); | |
// Подключаем Метрику, если юзер дернул мышкой. | |
document.addEventListener('mouseenter', loadScript); | |
// Подключаем Метрику, если юзер кликнул мышкой. | |
document.addEventListener('click', loadScript); | |
// Подключаем Метрику при полной загрузке DOM дерева, | |
// с "отложкой" в 1 секунду через setTimeout, | |
// если пользователь ничего вообще не делал (фоллбэк). | |
document.addEventListener('DOMContentLoaded', loadFallback); | |
} | |
function loadFallback() { | |
timerId = setTimeout(loadScript, 1000); | |
} | |
function loadScript(e) { | |
// Пишем отладку в консоль браузера. | |
if (e && e.type) { | |
// console.log(e.type); | |
} else { | |
// console.log('DOMContentLoaded'); | |
} | |
// Если флаг загрузки Метрики отмечен, | |
// то ничего более не делаем. | |
if (loadedScript) { | |
return; | |
} | |
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://cdn.jsdelivr.net/npm/yandex-metrica-watch/tag.js", "ym"); | |
ym(metricaId, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); | |
// ====== | |
// Тут ещё код (пиксели, другие счётчики) | |
// ====== | |
// Отмечаем флаг, что Метрика загрузилась, | |
// чтобы не загружать её повторно при других | |
// событиях пользователя и старте фоллбэка. | |
loadedScript = true; | |
// Очищаем таймер, чтобы избежать лишних утечек памяти. | |
clearTimeout(timerId); | |
// Отключаем всех наших слушателей от всех событий, | |
// чтобы избежать утечек памяти. | |
window.removeEventListener('scroll', loadScript); | |
window.removeEventListener('touchstart', loadScript); | |
document.removeEventListener('mouseenter', loadScript); | |
document.removeEventListener('click', loadScript); | |
document.removeEventListener('DOMContentLoaded', loadFallback); | |
} | |
})() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment