Продолжение поста «Почему в последнее время тормозит Pikabu?»

UPD от администрации: убедились с пользователем, что тормоза не связаны с Адблоком: #comment_284244345. Автор удалил свою статью с Хабра.

Итак, копнём чуть поглубже и убедимся, что @pikabu и @SupportTech поступают, как мудаки. Заодно делаем ставки, за сколько этот пост удалят, а меня заблокируют.

Преабула: в последнее время у многих людей тормозит сайт. Здесь мы разберёмся, почему это происходит. Внимание, много минифициваронного кода!

Для ЛЛ: если в браузере запущен AdBlock, то в код страницы встраивается скрипт, специально тормозящий сайт.

При загрузке сайта в app.js выполняется вот такая милая функция:

Продолжение поста «Почему в последнее время тормозит Pikabu?» Пикабу, Нововведение, Web-программирование, Adblock, Жалоба, Ответ на пост, Длиннопост

Что она делает? Она создаёт невидимый элемент с именами классов, соответствующих рекламе. В этом можно убедиться, поставив точку останова непосредственно при добавлении этого элемента:

Продолжение поста «Почему в последнее время тормозит Pikabu?» Пикабу, Нововведение, Web-программирование, Adblock, Жалоба, Ответ на пост, Длиннопост

Далее происходит небольшая пауза (o.W вызывает requestAnimationFrame), после которой в цикле с небольшими задержками (i.g ведёт на setTimeout) проверяется, не изменился ли стиль этого элемента определённым образом (см. функцию h). Если изменился - значит AdBlock присутствует и скрыл этот элемент, как рекламу. Если изменений нет - то и AdBlock нет, всё просто.

Результат этой функции передаётся сюда:

Продолжение поста «Почему в последнее время тормозит Pikabu?» Пикабу, Нововведение, Web-программирование, Adblock, Жалоба, Ответ на пост, Длиннопост

K.P - это та самая функция определения AdBlock, что выше.

Проверяется домен (видимо, чтобы на localhost у разработчиков не срабатывало). Далее в cookie с названием "bs" пишется определённое значение: латинская буква и цифра ("K0", "A1"). Если AdBlock присутствует, пишется "1". Если отсутствует - пишется "0".

Как известно, cookie - по сути единственный способ, которым браузер может общаться с бэкендом без каких-либо дополнительных операций.

Если в куке стоит нолик, то всё нормально, и в коде страницы нет ничего подозрительного. Но как только мы включим AdBlock, и в куке будет написана единичка... В код страницы сразу же встраивается вот такая хрень:

Продолжение поста «Почему в последнее время тормозит Pikabu?» Пикабу, Нововведение, Web-программирование, Adblock, Жалоба, Ответ на пост, Длиннопост

Весь вот этот блок целиком, да. Особенно интересна вот эта часть:

Продолжение поста «Почему в последнее время тормозит Pikabu?» Пикабу, Нововведение, Web-программирование, Adblock, Жалоба, Ответ на пост, Длиннопост

Во-первых, этот код делает синхронный XHR-запрос к серверу. Синхронные запросы отличаются тем, что заставляют вкладку браузера подвиснуть до тех пор, пока запрос не будет выполнен. Этим и обусловлены тормоза у пользователей - они происходят из-за того, что браузер выполняет синхронный запрос к серверу. Для того, чтобы сделать запрос асинхронным и ничего не тормозить, достаточно добавить true третьим параметром. Но тогда пользователи ведь продолжат пользоваться AdBlock, верно?

Во-вторых, этот код скачивает непонятно какой скрипт с сервера и выполняет его. В скрипте может содержать что угодно. Но в принципе, это мелочи, мы и так не можем контролировать скрипты на сайте.

При этом товарищи из @SupportTech предлагают отключать расширения, в том числе AdBlock, чтобы ничего не тормозило. Логично, вы ведь сами добавили тормоза, если AdBlock включен.

@Pikabu, @SupportTech, ваши комментарии?

P. S. Запрещаю переносить этот пост в сообщества, так как это не является багрепортом или предложением по сайту.

Отзывы и предложения по Пикабу

13.1K постов2.7K подписчик

Добавить пост

Правила сообщества

Сообщество для аккумуляции всего фидбека по Пикабу


Если вы предлагаете новую функцию, опишите подробно:

- Задачу, которую выполняет предлагаемое изменение;

- Возможные плюсы и минусы;

- Версию Пикабу, для которой делаете предложение.


Пожалуйста, имейте в виду, что предложение:

- Должно быть полезным, понятным и простым;

- Должно быть востребованным пикабушниками;

- Не должно создавать визуального нагромождения.

Вы смотрите срез комментариев. Показать все
2
Автор поста оценил этот комментарий

Автор, там вам на хабре неудобный вопрос задали... (Ссыль на мануал https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequ... )

Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (5)
1
Автор поста оценил этот комментарий

Согласен, мой косяк, перепутал и с чего-то решил, что по умолчанию запрос будет синхронным. Но ранее натыкался именно на синхронные запросы, см. тут: Почему в последнее время тормозит Pikabu?

Конкретно этот пост отредактировать уже не получится, с Хабра пост снёс.

раскрыть ветку (4)
1
Автор поста оценил этот комментарий

Изначально тот код, из вышеперечисленного поста, находился в одном из скриптов, загружаемых через AJAX. Поэтому я и стал копать в сторону подозрительных подгрузок скриптов, в итоге наткнулся на код, определяющий Adblock.

Короче говоря, проблема была, но с рекламой она никак не связана.

Приношу свои извинения @pikabu и @SupportTech, был неправ.

раскрыть ветку (3)
Автор поста оценил этот комментарий

Ну кстати не факт.  То, что  есть  кусок определяющий адблок - факт. То, что запросы вызываются нормально факт. Но.

У меня стоит ублок и через него пролезает реклама яндекса(скрипты для гризмонки не использую - ломают другой функционал). И вот пока не загрузяться блоки яндекса - все висит наглухо. А они, кстати, грузятся не всегда, но висит - всегда. Так что вполне возможно, что пикабу таки весит из-за рекламы, только косяк не на стороне пикабу, а на стороне яндекса, например.

А еще, у меня есть другое устройство, где рекламы на пикабе нет вообще. И вот там все летает. И посты грузятся мгновенно, и глюков сильно меньше )

1
Автор поста оценил этот комментарий

Не против, если мы внесем это уточнение в пост?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Только за.

Pikabu vs AdBlock - сюда заодно тоже.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку