danielnewman
@danielnewman
Front-end

Яндекс.Метрика (tag.js) тормозит отрисовку страницы. Почему и как ускориться?

Сейчас злой вариант в голове нарисовался - убивать метрику на подобных страницах, но чувствую, что это вариант из разряда "закрыть глазки". Кто видел подобное и решил это красиво?

Дано:
— Поисковая выдача авиарейсов
+11.6с - отработка и получение 0.5Mb ~140 вариантов
+ 1.7с отрисовка полученных данных на экран

Добавляю Яндекс.Метрика с вебвизором
+10.5с - отработка и получение 0.5Mb ~140 вариантов
+ 20с отрисовка полученных данных на экран
Из них - (!) 17c - tag.js от метрики.

Борода Paerformance от Chrome гугла выглядит феерично:
M3r01oG.png

Из прилогающегося к метрики tag.js самой жирной и медленной заявлена `Animation Frame Fired (tag.js:98)`, которая порождает `Function Call (tag.js:98)`, который, в свою очередь, порождает серию `(anonymous)` функций и выглядит это как-то так:
WjVAOe2.png

Если есть идеи, как найти и устронить причину - буду бесконено признателен!

UPD: Мечтаю увидеть необфусцированный исходник всего этого метрического js.
Беда происходит из-за этого механизма, как мне видится сейчас, но смущает имя функции/класса matchesSelector, который созвучен с этой вот штукой.

Вот что в нём/них понапихано
matchesSelector: function(a, d) {
    var c = this.find(["matches", "webkitMatchesSelector", "mozMatchesSelector", "msMatchesSelector", "oMatchesSelector"], function(c) {
        return "function" == typeof q.body[c]
    });
    return this.matchesSelector = function(a, d) {
        if (!a || null == a.ownerDocument)
            return !1;
        try {
            return a[c](d)
        } catch (r) {
            return h.log({
                matchFunction: c,
                el: a
            }), !1
        }
    },
    this.matchesSelector(a, d)
},
closestParent: function(a, d) {
    for (var c = 2 < arguments.length && void 0 !== arguments[2] && arguments[2] && -1 !== [Node.TEXT_NODE, Node.COMMENT_NODE].indexOf(a.nodeType) ? a : a.parentNode; c; ) {
        if (c && this.matchesSelector(c, d))
            return c;
        c = c.parentNode
    }
    return null
},


Не вижу, в чём он там залипает, этот watch.js

UPD2: В итоговом блоке, отрисованном великим jQuery, 15 000 html элементов на 100 "блоков" билет/рейс.
Где-то по 1мс тратится на проход и навешивание события метрики на каждый из htm-элемент, будь оно не ладно.
- 15 000 html-тэгов
- 4 000 из них - видимые
  • Вопрос задан
  • 9623 просмотра
Пригласить эксперта
Ответы на вопрос 3
Аналогичная проблема. Причем на той же странице с той же вёрсткой ее не было раньше. Примерно летом появился такой баг и только на одной странице. Причем страница оформления заказа…. Может что-то другое заставляет так тупить Яндекс метрику хз.

Возможно, кривая верстка у меня на этой странице. хз. Сейчас все переверстаю и посмотрю. Но вообще все эти метрики хочется выкинуть с сайтов. Они собирают статистику 90% для себя и 10% для нас. Владельцев сайтов. Копаться в том, что они делают не охота. Но они могут делать все что угодно с вашим сайтом, как и любой сторонний js. А Яндекс метрика в отличия от google analytic не стала стандартом для маркетинговых исследовании.

Для нормальных проектов нужна своя аналитика как ни крути. Либо аналитика с тонкой настройка того, что она делает. Пусть от гугла или яндекса. Пусть за деньги. Я не думаю что вам нужна аналитика которая отслеживает любой события по любому элементу на вашем сайте.

p/s У меня проблему вызывали пункты выдачи заказов которые отрисовывались на яндекс карте... раньше это не было проблемой для яндекс метрики. Я их стал ставить через ObjectManager и проблема ушла.

p/s На самом деле проблема как всегда в дополнительных расширениях для браузера. Они играются с DOM и метрика следит за этим ....
Ответ написан
Комментировать
@Stanisalvsky
Приветствую, а можно ссылку на страницу на которой тормозит? У меня встречалась подобная проблема, может я смогу вам помочь.
Ответ написан
attach-Guru
@attach-Guru
Создание и продвижение сайтов
Блокировщик рекламы сыграл с тобой злую шутку. Отключи блокировщик рекламы в дополнениях браузера и всё.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы