Перейти к содержимому
PD
Browser Automation Studio

BAS тормозит и ест память: как ускорить бота и снизить расход ресурсов

Почему бот Browser Automation Studio съедает память и замедляется: отключение картинок и лишних запросов, работа без браузера, чистка вкладок и профилей, утечки при долгой работе и как найти реальное узкое место.

Все статьи гида Browser Automation Studio · 48

Жалобы «BAS тормозит» и «BAS жрёт память» почти всегда об одном и том же: браузер - дорогой инструмент, а бот платит за него полную цену даже там, где мог бы платить малую. Хорошая новость в том, что оптимизация здесь редко требует переписывания логики - чаще достаточно перестать грузить то, что вам не нужно.

Сначала измерьте, потом чините

Самая частая ошибка - оптимизировать наугад. Прежде чем что-то менять, ответьте на один вопрос: где именно уходит время в одной итерации?

Расставьте отметки времени по ключевым шагам и запишите их в лог. Практически всегда картина одинаковая: 80% времени - это ожидание, а не работа. Ожидание загрузки страницы, фиксированные паузы, ожидание элементов. И это меняет план: вылизывать логику бессмысленно, если бот две трети итерации просто стоит.

То же с памятью. «Много занимает» - не диагноз. Растёт ли расход со временем (утечка) или он стабильно высокий с первой минуты (просто много потоков)? Это разные проблемы.

Не грузите то, что не смотрите

Самый быстрый выигрыш. Бот, который парсит текст, всё равно скачивает картинки, шрифты, аналитику и рекламу - трафик, время и память тратятся на то, чего он никогда не увидит.

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

Осторожность нужна там, где сайт проверяет поведение: если бот не запрашивает ни одной картинки и ни одного шрифта, его профиль запросов выглядит нетипично. На чувствительных площадках это дополнительный сигнал.

Самый большой выигрыш: не запускать браузер

Ключевой вопрос при оптимизации звучит так: а браузер вообще нужен?

Браузер нужен, когда важен рендеринг: контент рисуется JavaScript, есть защита от ботов, нужны клики по интерфейсу, работает сложная авторизация. Но огромная доля задач - это запрос данных и разбор ответа. Там HTTP-клиент даёт не проценты, а разы: расход на поток падает с сотен мегабайт до единиц, и потоков можно поднять на порядок больше.

Практичный компромисс - гибридная схема: браузером один раз проходите авторизацию, забираете cookies, а дальше работаете HTTP-запросами с этими cookies. Тяжёлая часть выполняется один раз, лёгкая - тысячу раз.

Утечки при долгой работе

Если расход памяти растёт от часа к часу, это не «BAS такой» - это накопление. Обычные источники:

  • Вкладки, которые не закрыли. Каждая открытая вкладка держит память до конца потока. Открыли - закройте.
  • Разрастающиеся профили. Кеш, cookies и история копятся между запусками; профиль, живущий месяцами, распухает до сотен мегабайт.
  • Списки в памяти. Накапливать результаты в переменной и писать в файл в самом конце - плохая идея на длинных прогонах: и память съедается, и при падении вы теряете всё. Пишите порциями.
  • Зависшие процессы браузера. После аварийного завершения потока процесс может остаться. Они не видны в интерфейсе, но память держат.

Хорошая проверка на утечку: замерьте расход через 10 минут и через 2 часа. Стабильные цифры - значит потоков просто много. Рост - ищите накопление из списка выше.

Ожидания решают больше, чем кажется

Фиксированная пауза - самый дорогой способ подождать. Она либо длиннее нужного (и вы теряете время на каждой итерации), либо короче (и вы получаете «элемент не найден»).

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

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

Что делать в каком порядке

Если бот тормозит и вы не знаете, с чего начать:

  1. Замерьте время по шагам - найдите, где действительно уходит время.
  2. Уберите фиксированные паузы там, где можно ждать событие.
  3. Отключите загрузку картинок и лишних ресурсов.
  4. Проверьте, нельзя ли часть работы или всю её перенести на HTTP.
  5. И только потом добавляйте потоки.

Порядок важен. Добавлять потоки к неоптимизированной итерации - значит умножать неэффективность: вы тратите память на копии бота, который две трети времени просто ждёт.

Вопросы и ответы

Почему BAS занимает так много памяти?

Потому что каждый поток - это полноценный браузер, а браузер по своей природе тяжёлый: 150-400 МБ на поток нормально. Умножьте на число потоков, и цифра перестаёт удивлять. Снижают её двумя путями: облегчают каждый поток, отключив загрузку ненужного, или отказываются от браузера там, где хватает HTTP-запроса.

Как ускорить бота в BAS?

Сначала измерьте, где уходит время: обычно это не выполнение действий, а ожидание. Уберите фиксированные паузы в пользу ожидания событий, отключите загрузку картинок и шрифтов, и посмотрите, нужен ли браузер вообще - переход на HTTP-клиент там, где он применим, даёт кратный выигрыш, а не проценты.

Ещё по теме

Видео по теме

Все видео на YouTube-канале

Сделаю под ключ

Не хотите собирать сами? Соберу бота на BAS под вашу задачу

Многопоточность, прокси, антидетект-профили и запуск по расписанию. Весь проект и доступы остаются у вас.

от 300 $ · 3-7 дней