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

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

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


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

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

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

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


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

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

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

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

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

@SupportCommunity, прошу убрать пост из сообщества, так как он не соответствует теме сообщества. В посте нет отзывов либо предложений. Пост является разбором исходного кода. Перенесите в сообщество по программированию в таком случае.

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

Пф, если где-то можно притянуть правила, @moderator объявится тут как тут.
а где нет - OK. Ждите :3 скоро придет с заготовленным ответом почему то что вы видите не то что вы должны видеть -)

ещё комментарии
3
Автор поста оценил этот комментарий
Формально можно притянуть как отзыв. Жду статьи на Хабре.
раскрыть ветку (3)
12
Автор поста оценил этот комментарий
раскрыть ветку (2)
3
Автор поста оценил этот комментарий
*администрация банит домен хабра для публикации ссылок*
*ну и авторов.*
1
Автор поста оценил этот комментарий

открыть файл
/etc/hosts


и отредактировать его, чтобы первая строка выглядела так:
127.0.0.1 localhost pikabu.ru


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

Поржал))) но, ведь, действительно!

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