![image](https://habrastorage.org/webt/xe/0n/yp/xe0nypnmksxx0tsaz8zzlcxoxw0.jpeg)
Часто на Хабре можно встретить комменты в духе «Майнер — хороша замена/дополнение к рекламе на сайте» или «Я лучше отдам 10-40% CPU». Данная статья приведёт аргументы, почему такие утверждения в корне неверны. Также статья выдвинет предположение, как можно решить приведённые проблемы (не все), позволив майнерам стать дополнительным источником монетизации, что может положительно сказаться на вебе.
Справка: майнер — это программа для майнинга криптовалюты. Может встраиваться в сайты, принося автору сайта прибыль. Майнинг может использовать как мощности процессора, так и видеокарты (javascript может запускать шейдеры с помощью WebGL).
Почему майнер — зло
Данные причины могут быть очевидны многим, но выступающие за майнинг их не учитывают.
- Пользователь купил дорогую процессор/видеокарту чаще всего не для того чтобы половину ядер отъели майнеры. Допустим, я потратил на процессор 20к. Если у меня отожрут половину его ядер, получается, 10к потрачено впустую. А если я купил дешёвый процессор/видеокарту, то этот пункт ещё критичнее, ведь тогда ресурсы мне ещё важнее.
- Из-за недобросовестных майнеров лагает не только открытый сайт, но и другие сайты и даже вся система. Но если вы — добросовестный майнер, отжирать только часть ресурсов — не решение,
т. к:
- Это всё-равно не гарантирует отсутствия лагов.
- Если пользователь открыл несколько вкладок, и майнят сразу несколько сайтов, то мы всё-равно получим превышение, после которого начнутся лаги. В условиях, когда могут быть открыты сотни вкладок, такой сценарий очень вероятен.
- Аналогично мы получим превышение, если пользователь сам запустил какие-то программы.
Лаги из-за майнинга сложно контролировать. Как пользователю, мне лучше вообще было не открывать тот сайт, чем получить лаги. Только не всегда я знаю о майнере. - Если сайт не уведомил меня о майнинге, он просто может мешать моей работе. Например, если я купил 8 ядер, то будут времена, когда они будут простаивать, но будут также и времена, когда они нужны все. Один из самых простых примеров — я решил посмотреть фильм, но не смог сделать это из-за майнера. Причём насколько бы мощный комп Вы не купили, его ресурсы будут отжираться майнером.
- Майнинг — это перевод электричества в деньги, поэтому майнер, который не уведомляет меня о своей работе, по факту крадёт мои деньги,
т. к. оплачивать затраченную электроэнергию приходится мне. - Майнер приводит к разряду батареи.
- Майнеры не могут проверить, запущены ли майнеры на других открытых сайтах. Уже открыв несколько вкладок можно полностью перегрузить систему.
- Обычно для нормальной работы всегда должно быть свободно какое-то количество ресурсов. Майнер не может узнать, сколько ресурсов свободно в данный момент.
- Майнеры вызывают шум вентилятора.
- Майнер обычно действует скрытно. Например, увидя сайт с рекламой, я могу отдать предпочтение другому сайту,
т. е. у меня есть выбор. А вот с майнером выбора у меня нет. - Неопытные пользователи могут не понимать, почему лагает система.
- Когда Вы поняли, что Вам мешает майнер, поиск вкладки с майнером очень раздражает. А ещё хуже, когда Вы не поняли, что Вам мешает майнер.
- Добросовестность майнера трудно контролировать. При этом добросовестные майнеры — редкость.
- Нагрев устройства (ноутбука, мобильного телефона и
т. д.). - Достаточно критичные финансовые проблемы (см. ниже).
Если кратко, то майнеры вызывают лаги, мешают работе, крадут деньги (с помощью электроэнергии), разряжают аккумулятор, вызывают шум вентилятора и полностью перегружают систему при открытии нескольких вкладок. При этом майнер, в отличие от рекламы, действует скрытно, отбирая у пользователя выбор.
Финансовые проблемы
- Если бы все сайты начали устанавливать майнеры, прибыль, которую они могут получить, тоже бы падала,
т. к. ресурсы пользователя ограничены. Даже сейчас прибыль очень мала, а что, если она упадёт ещё в 10 раз? При этом неудобства пользователю мы причиняем огромные. - Отличия в стоимости электричества. Например, часть пользователей потратив 2$ могут сгенерить только, к примеру, 1$.
- Производительность. Но этот пункт вряд ли применим,
т. к. javascript может майнить на видеокарте с помощью шейдеров, написанных на GLSL. А если мы говорим о майнинге на CPU, то подразумевается валюта, заточенная именно под CPU — на видеокарте её майнинг невозможен или неэффективен. Причём для ускорения на CPU мы можем поюзать WebAssembly.
Усиление экологической проблемы
Раньше электричество для майнеров было не бесплатное, поэтому невыгодным майнингом они не занимались. Но когда работа начала перекладывается на пользователя, майнеру больше нет смысла экономить, что приведёт к намного более огромным тратам электричества.
Если раньше потребление электричества было равно рыночной стоимости монет (и тоже было огромным), то теперь увеличится ещё в несколько раз. Очень сомнительная перспектива.
Решения некоторых проблем
п. 2 (лаги), п. 3 (мешает работе), п. 6 (несколько вкладок) и п. 7 (оставление свободных ресурсов) можно попытаться решить программно, например, делая раз в секунду на долю секунды тестовую загрузку на 100%, и проверяя, сколько вычислений удалось провести. Из минусов:
- Мы не можем узнать, насколько сильно мы при этом ущемили другие процессы, поэтому определить таким способом свободные ресурсы можно было бы только в случае, если бы мы запускались с самым низким приоритетом, но такой возможности нет.
- Определение будет с задержкой.
- Невысокая точность.
- Не учитывается наличие скачкообразных нагрузок. Особенно этот пункт актуален на видеокарте — нам часть может потребоваться много ресурсов (от общего процента) на короткое время.
- Нельзя учесть использование shared-ресурсов. Например, даже если майнер будет работать в половину мощности, это не значит, что он не может забить кэш L3, который может кому-то понадобиться. Кроме того, забитие кэша понизит производительность однопоточных приложений.
п. 5 (разряд батареи) — можно решить, если браузер будет уведомлять, подключено ли устройство от сети.
п. 8 (шум вентилятора) и п. 13 (нагрев устройства) — можно решить, если установить в браузере настройку, какой процент ресурсов может быть суммарно задействован в системе. Данная настройка должна учитываться сайтами. Из минусов — она может использоваться для отслеживания.
Решение сразу всех пунктов (кроме финансовых и экологических)
Решить сразу все пункты можно, если браузеры будут заносить в чёрный список сайты с майнерами, не соблюдающими следующие правила:
- Майнер должен оставлять как минимум 50% свободных ресурсов вне зависимости от нагрузки системы. Если система уже загружена на 50%, майнер не должен работать.
- Майнер должен посылать браузеру специальное уведомление о майнинге. Данное уведомление браузер отобразит значком в адресной строке, а также на самой вкладке, как это уже делается с проигрыванием аудио.
- Майнер не должен работать, если пользователь запретил майнинг на всех сайтах или на текущем сайте.
- Майнер не должен работать при работе от батареи.
Конечно же, даже если сайт находится в чёрном списке, пользователь всё-равно должен иметь возможность зайти на сайт после соответствующего предупреждения. Аналогичным образом могут поступать и поисковые системы, понижая недобросовестные сайты в результатах выдачи.
Недостаток в том, что проверять сайты очень трудоёмко, а также майнер может показываться не всем посетителям. Другой недостаток — не решён восьмой пункт (шум вентилятора).
Более продвинутое решение
Более продвинутое решение — встроить майнинг прямо в браузер, тогда сам браузер автоматически проконтролирует выполнение всех пунктов, а пользователю не будет доставлено никаких неудобств (обратите внимание на четыре правила, которые я привёл выше). Автору сайта остаётся лишь выбрать, какую валюту майнить.
Преимущества
- Теперь все встроенные майнеры будут считаться недобросовестными, т. е. выявление майнеров не станет сложнее, чем сейчас. В предыдущем же способе это было усложнено.
- Мы можем обеспечить лучшую производительность (равно как и худшую,
т. к. нет конкуренции между программами-майнерами). - Решёна проблема с шумом вентиляторов, ведь теперь настройка мощности хранится в самом браузере и не передаётся сайтам, а значит и не может использоваться для отслеживания.
- Простота настройки для автора сайта.
При этом по факту браузерам необязательно блокировать недобросовестные сайты самостоятельно, а можно оставить это сторонним продуктам, например, антивирусным программам или дополнениям.
Недостатки
Решение обладает рядом существенных недостатков:
- Поддерживать это всё со стороны браузеров трудоёмко. Особенно трудоёмка поддержка разных программ-майнеров от разных валют. С другой стороны, браузеры могут получить дополнительную монетизацию за счёт продвижения определённых валют.
- Девятый пункт (отсутсвие выгоды, когда все начнут майнить) мы побороть никак не можем. Это значит, что разработчики браузеров должны проделать огромную работу, которая может не принести никакой пользы вебу.
- При определении свободных ресурсов осталось много нюансов. Мне, как пользователю, выгоднее отключить майнинг. Впрочем, отключив общий майнинг, я могу принудительно включить его на любимых сайтах, благодаря чему им не придётся конкурировать с остальными сайтами.
- Прибыльность майнинга очень нестабильна. Мало кто захочет реализовывать функционал, польза которого очень сомнительна.
- Не решена ни одна из проблем, описанных в разделе «Финансовые проблемы».
- Не решена экологическая проблема, в которой траты электричества увеличиваются в несколько раз по сравнению с текущей ситуацией, т. к. майнерам больше не нужно экономить на электричестве. Ну и просто, поддерживая майнинг, мы поддерживаем бессмысленную трату энергии.
Итоги
Описанная выше схема имеет значительные недостатки, но мало кто будет против неё — на крайний случай майнинг можно просто отключить в настройках.
Но те, кто выступают за майнинг, обычно не указывают на сопутствующие проблемы и их решения, а без этого майнинг доставит огромные неудобства пользователю.
Нужно также отметить:
- Браузеры уже начали ограничивать использование CPU в фоновых вкладках, но при большом количестве открытых вкладок они всё-равно дадут большую нагрузку, т. е. это не является полноценной защитой.
Также хорошим решением было бы полностью ограничить использование видеокарты в фоновых вкладок за исключением тем, кому пользователь специально разрешил это.
При этом оба этих решения малоэффективны, когда активных вкладок больше одной. Такое может быть, когда открыто несколько браузеров/окон.
P.S.: Эта статья — не истина в последней инстанции, поэтому было бы интересно услышать другие аргументы, которые я упустил.
P.S.: Эта статья не выступает за или против майнинга, а лишь указывает недостатки, способы их исправления и преимущества. Но если определять точку зрения, то скорее против, т. к. без поддержки браузерами не имеет смысла, а с поддержкой никогда не окупится и имеет ряд других серьёзных проблем.