91

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

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. Запрещаю переносить этот пост в сообщества, так как это не является багрепортом или предложением по сайту.

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

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


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

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

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

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


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

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

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

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

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

Привет.


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


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


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

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

Окей, рассматриваем факты.

1. Вы публично утверждали, что вас не было обновлений, влияющих на работу сайта с блокировщиками рекламы. При этом по факту они таки есть.

2. Про возможные фризы от использования синхронных запросов широко известно, это исправляется элементарно. Следовательно, есть лишь две причины их использования:

* либо они используются намеренно по какой-либо причине;

* либо ваши разработчики почему-то не знают про это, причём код прошёл весь процесс ревью и никто этого не заметил.
3. В скрипте, которые вы загружаете этими запросами, содержится код для работы сервиса AdFox от Яндекса. Весь этот синхронно загружаемый скрипт нужен лишь для другой рекламы, в этом скрипте нет никаких исправлений для сайта и его стабильной работы.

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

Зачем вы этот код вставляете тем у кого включен АдБлок?

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

Почему приложение до сих пор тормозит? Не прогружаются коменты и посты максимум 15 шт в горячем потом виснет и не прогружаются?

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

Через вайфай стал жестко тормозить. ПРовайдер ТТК. И Именно сегодня

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