PIKABU ВСЁ
В мобильном приложении исчезли минусы
В мобильном приложении исчезли минусы
UPD от администрации: тормоза не связаны с Адблоком: #comment_284244345. Автор удалил свою статью с Хабра.
Практически все популярные ресурсы монетизируются тем или иным образом. Пикабу - не исключение. Тут и рекламные баннеры, и спонсорские посты, а последнее время ещё и вакансии. Вполне естественно, что пользователи не хотят видеть эту рекламу и пользуются различными плагинами типа AdBlock для её блокировки.
Да, есть сайты, которые показывают баннер на весь экран, когда определяют использование AdBlock. У многих этот баннер можно просто скрыть, нажав на соответствующую кнопку... Но это ведь не наш метод, правда? Лучше сделать так, чтобы сайт тормозил, если включен AdBlock, и свалить вину на него!
Итак, откроем код актуальных скриптов для десктопной версии сайта: https://cs.pikabu.ru/apps/ub/5.3.0/desktop/app.efa0bb5da0cd..... Где-то в нём есть вот такой кусок (слегка деобфусцировано):
В целом этот код очень похож на скрипт detect-adblock.js, с некоторыми изменениями. Возможно, используется какое-то схожее готовое решение - я не знаю.
Эта функция для определения AdBlock используется здесь:
Cookie - это единственный способ незаметно отправить данные на сервер при открытии страницы в браузере, до её непосредственной загрузки и независимо от пути открываемой страницы.
Для чего же нужна эта кука? Если в ней записан "0" ("A0", "E0" и т. п.) - то буквально ничего не происходит. Если же в её значении присутствует "1" ("C1", "K1" и т. п.), то в HTML-код загружаемой страницы будет встроен следующий блок:
Сам код выглядит слегка подозрительно, как будто какая-то малварь... но дело даже не в этом. Здесь присутствуют два XHR-запроса, выполняемых в синхронном режиме. То есть во время выполнения этих запросов браузер "подвисает". Для того, чтобы сделать их асинхронными, достаточно передать true третьим параметром в методе XMLHttpRequest.open. Мне кажется, про это знает буквально каждый веб-разработчик из тех, кто ещё пользуется XMLHttpRequest. Более того, про недостаток синхронных запросов говорится во многих местах:
в документации к методу XMLHttpRequest.open от Mozilla:
Note: Synchronous requests on the main thread can be easily disruptive to the user experience and should be avoided; in fact, many browsers have deprecated synchronous XHR support on the main thread entirely. Synchronous requests are permitted in Workers.
на отдельной странице у Mozilla, посвящённой синхронным и асинхронным запросам:
Warning: Synchronous XHR requests often cause hangs on the web, especially with poor network conditions or when the remote server is slow to respond. Synchronous XHR is now deprecated and should be avoided in favor of asynchronous requests.
в спецификации WhatWG:
Synchronous XMLHttpRequest outside of workers is in the process of being removed from the web platform as it has detrimental effects to the end user’s experience. (This is a long process that takes many years.) Developers must not pass false for the async argument when the current global object is a Window object. User agents are strongly encouraged to warn about such usage in developer tools and may experiment with throwing an "InvalidAccessError" DOMException when it occurs.
в популярном российском учебнике по Javascript:
Выглядит, может быть, и неплохо, но синхронные запросы используются редко, так как они блокируют выполнение JavaScript до тех пор, пока загрузка не завершена. В некоторых браузерах нельзя прокручивать страницу, пока идёт синхронный запрос. Ну а если же синхронный запрос по какой-то причине выполняется слишком долго, браузер предложит закрыть «зависшую» страницу.
Да и буквально везде. Единственное, чем можно объяснить наличие синхронных запросов - это желание насолить пользователям и заставить их отключить AdBlock на сайте. И администрация ресурса обвиняет в тормозах именно блокировщики рекламы:
Выводы? А их нет. Просто вот такая монетизация. "Виноваты не мы, виноват AdBlock, не пользуйтесь им, смотрите больше нашей рекламы".
Dixi.
Источник: https://habr.com/ru/articles/761812/
UPD от администрации: убедились с пользователем, что тормоза не связаны с Адблоком: #comment_284244345. Автор удалил свою статью с Хабра.
Итак, копнём чуть поглубже и убедимся, что @pikabu и @SupportTech поступают, как мудаки. Заодно делаем ставки, за сколько этот пост удалят, а меня заблокируют.
Преабула: в последнее время у многих людей тормозит сайт. Здесь мы разберёмся, почему это происходит. Внимание, много минифициваронного кода!
Для ЛЛ: если в браузере запущен AdBlock, то в код страницы встраивается скрипт, специально тормозящий сайт.
При загрузке сайта в app.js выполняется вот такая милая функция:
Что она делает? Она создаёт невидимый элемент с именами классов, соответствующих рекламе. В этом можно убедиться, поставив точку останова непосредственно при добавлении этого элемента:
Далее происходит небольшая пауза (o.W вызывает requestAnimationFrame), после которой в цикле с небольшими задержками (i.g ведёт на setTimeout) проверяется, не изменился ли стиль этого элемента определённым образом (см. функцию h). Если изменился - значит AdBlock присутствует и скрыл этот элемент, как рекламу. Если изменений нет - то и AdBlock нет, всё просто.
Результат этой функции передаётся сюда:
K.P - это та самая функция определения AdBlock, что выше.
Проверяется домен (видимо, чтобы на localhost у разработчиков не срабатывало). Далее в cookie с названием "bs" пишется определённое значение: латинская буква и цифра ("K0", "A1"). Если AdBlock присутствует, пишется "1". Если отсутствует - пишется "0".
Как известно, cookie - по сути единственный способ, которым браузер может общаться с бэкендом без каких-либо дополнительных операций.
Если в куке стоит нолик, то всё нормально, и в коде страницы нет ничего подозрительного. Но как только мы включим AdBlock, и в куке будет написана единичка... В код страницы сразу же встраивается вот такая хрень:
Весь вот этот блок целиком, да. Особенно интересна вот эта часть:
Во-первых, этот код делает синхронный XHR-запрос к серверу. Синхронные запросы отличаются тем, что заставляют вкладку браузера подвиснуть до тех пор, пока запрос не будет выполнен. Этим и обусловлены тормоза у пользователей - они происходят из-за того, что браузер выполняет синхронный запрос к серверу. Для того, чтобы сделать запрос асинхронным и ничего не тормозить, достаточно добавить true третьим параметром. Но тогда пользователи ведь продолжат пользоваться AdBlock, верно?
Во-вторых, этот код скачивает непонятно какой скрипт с сервера и выполняет его. В скрипте может содержать что угодно. Но в принципе, это мелочи, мы и так не можем контролировать скрипты на сайте.
При этом товарищи из @SupportTech предлагают отключать расширения, в том числе AdBlock, чтобы ничего не тормозило. Логично, вы ведь сами добавили тормоза, если AdBlock включен.
@Pikabu, @SupportTech, ваши комментарии?
P. S. Запрещаю переносить этот пост в сообщества, так как это не является багрепортом или предложением по сайту.
Дорогие подписчики, я мустанг, я мухожук, больше не могу это терпеть. Я старался и пилил для Вас уникальный, высококачественный контент, забывая про семью, работу и даже баночку зеленки, которую сохранил от покойного пса Накичився. Бессоные ночи, проводимые на дождливых улицах в поисках информации для постов, навели меня на мысли о том, что пора уже прекращать кормить капиталистическую машину по уничтожению этого сайта. Уверен, если я покину это некогда уютное и ламповое место, то вскоре Российскому сегменту интернета придет каюк. Прошу, не вините себя ни в чем, не корите себя за то, что не смогли меня удержать. Моё сердце навсегда принадлежит Вам и моему туловищу.
А можно сделать сообщество на pikabu, старое доброе пикабу типа oldpikabu, и там постить только авторский контент, ну и свежие хахайки и прочие ништяки, туда все старые олды вернуться и будем внутри пикабу своим старым добрым пикабу, блять)))) Только вот не знаю механику, как не пускать пидоров с телегами, можно ли их банить нахуй, новорегов, вообще сразу скриптом в бан, ну и как то прочее организовать, чтобы дермецо всё фильтровать, а вот с минусами хз как, может скрипт какой)). Или не прокатит так?
Я один круворукий и слепой. Не могу коммент написать и даже увидеть возможность это сделать?
Жил был мужик и было у него три сына: старший - умный, средний - так и сяк, а младший - во все был дурак.
и вот пришло время мужику помирать, собрал он сыновей и говорит:
- старший сын, подь сюды. Тебе оставляю все свои деньги, деньжищи, бабосики, финансы! Трать их куда хочешь, делай что хочешь, иди на хер.
старший сын собрал всё бабло и убëг нахер тратить налево и направо.. Так и спился...
- средний сын, подойди. Оставляю тебе всё хозяйство, все земли и фермы, работай! Трудись! Умножай влияние и сортимент!!
средний сын пошел трудиться, бла бла. успех и тд и тп.
- младший сын, ковыляй ко мне! Вот тебе семушка. Посадишь её, вырастишь дерево, соберешь плоды, продашь их и будешь обеспечен до конца жизни своей.
- кхе, кхе, аргхкху
- и кота забери
Рыжий, блохстый о трёх ногах.
И прошептал заклинание: Лëлики - болики. И в тот же момент откинулся..
И вот идет младший сын, кошак этот за ним ковыляет.. Завидует старшим... Пнул кота ногой, закопал семку в землю, поссал сверху и спать лег под сосной.
утром проснулся, гляяя, дерево стоит в небеса, а на дереве плоды висят. Хуи разноразмерные, длинные, тонкие, толстые, короткие, всяких разных... Ахренел Иван дурак, но не спасовал. Нарвал хуëв этих два мешка да пошел на рынок продавать.
идет через лес да думает: приду - как опозорюсь, ну их нахер, спрятал за пнем мешки и лапником прикрыл. Сам взял один ХУЙ да на рынок пришёл.
Положил на прилавок, раскраснелся весь, стоит продает... А тут как раз у помещицы муж пропал, а она мимо лавки идет и видит, что ей в жизни не хватает!! Грит: - а чойто ты продаешь тут? Иван ей отвечает: - да вот, мужской половой хуй! А она спрашивает: - а почем? Дорого, ответ был Ивана.
сговорились по цене, забрала помещица ХУЙ, а Иван ей заклинание прошептал.
Пришла барышня домой, заперлась в почивальне. Достала МПХ и прошептала заклинание: лëлики!
член встрепенулся, восстал, да как давай барыню сношать во все щели!! Та разгорелась, обкончалась, пару раз сквиртанула и говорит: Болики. МПХ успокоился и лег на полку.
собралась барыня, да поехала мертвые души считать..
А все это дело горничная через замочную скважину видела, да только с самого начала, да не до самого конца!
и как только барыня укатила, влетела в почивальни, скинула труселя и кричит: ЛËЛИКИ!!!!!
МПХ восстал и как давай йпать прислугу во все дыры!!!! 5 минут, 15, полчаса, час, та уже обкончалась вся, сил нет. Выбегает во двор, а там дворник метлой метет.. Ах ох, михалыч, дорогой, скажи: Лëлики? Ну, дворник долго не думая и говорит: Лëлики!
Хуй как набросился на мужика!!! Как давай его пердолить!!! Дворник в ахуе!!! Горничная сквозонула куда-то... Но наш мужик не луком шит и погнал в конюшню,. Там конюх навоз метет.. Ну дворник собрался весь, виду не подает, и говорит: слыш говномес а спорим ты не сможешь выговорить ЛЕЛИКИ!!
конюх раз обиделся, да как крикнет: лËлики!!!МПХ кинулся сношать конюха....
И вот сидят дворник да конюх и думают, как бы им избавиться от этой напасти... И тут пришла им в голову идея: встать по разные берега реки и кричать: ЛЕЛИКИ!!!!
мпх будет летать туда сюда, устанет, упадет в реку и утонет..
Так и сделали..
так и получилось, упал в реку и утоп.
Идут они домой, уставшие, ЗАЕБАННЫЕ, еле плетутся. А тут под пнем два мешка стоят...
Конюх подбегает, открывает первый мешок, а там хуи лежат!!!
И Конюх, толи от шока, толи от радости, кричит: УХ ТЫ, ЛËЛИКИ!!!!!!!!!!!
....
Взять с собой побольше вкусняшек, запасное колесо и знак аварийной остановки. А что сделать еще — посмотрите в нашем чек-листе. Бонусом — маршруты для отдыха, которые можно проехать даже в плохую погоду.