Сказав вышеупомянутые пункты, вот некоторые из наиболее распространенных лучших практикадаптировать при работе безголовых браузеров в производственной среде:
Не запускать браузер без монитора :
По всем учетным записям, если это вообще возможно, просто не запускать браузер без монитора.Безголовые браузеры непредсказуемы и голодны.Почти все, что вы можете сделать с помощью браузера (за исключением интерполяции и запуска JavaScript), можно сделать с помощью простых инструментов Linux.Существуют библиотеки, которые предлагают элегантные Node API для извлечения данных с помощью HTTP-запросов и очистки , если это ваша конечная цель.
Не запускайте безголовый браузер, если вам не нужно :
Есть пользователи, которые пытаются держать браузер открытым, даже когда он не используется, чтобы он всегда был доступен для подключений.Хотя это может быть хорошей стратегией, помогающей ускорить запуск сеанса, через несколько часов это может закончиться страданиями.Во многом это связано с тем, что браузерам нравится кэшировать содержимое и медленно использовать больше памяти.В любое время, когда вы не используете браузер активно, закройте его!
Распараллеливайте с браузерами, а не со страницами :
Мы должны запустить только одинкогда это абсолютно необходимо, следующая рекомендация - запускать только один сеанс через каждый браузер.Хотя вы действительно можете сэкономить некоторые накладные расходы путем распараллеливания работы через страницы, если одна страница падает, это может привести к выходу из строя всего браузера.Кроме того, не гарантируется, что каждая страница будет полностью чистой (файлы cookie и хранилище могут просочиться).
page.waitForNavigation
:
Одной из наиболее распространенных проблем являются действия, которые запускают загрузку страниц, и внезапная потеря исполнения ваших скриптов.Это связано с тем, что действия, запускающие pageload
, часто могут привести к проглатыванию последующей работы.Чтобы обойти эту проблему, вам, как правило, придется вызывать действие загрузки страницы и немедленно ждать следующей загрузки страницы.
Используйте docker, чтобы вместить все это :
Для правильной работы Chrome требуется много зависимостей.Даже после того, как все это завершено, есть такие вещи, как шрифты и фантомные процессы, о которых вам нужно беспокоиться, поэтому идеально использовать какой-то контейнер для его хранения.Docker почти специально создан для этой задачи, так как вы можете ограничить количество доступных ресурсов и поставить его в песочницу.Создайте свой собственный Dockerfile .
И чтобы избежать запуска процессов зомби (которые обычно происходят в Chrome), вам нужно использовать что-то вроде dumb-init
для правильного запуска.
Два разных времени выполнения :
Может быть два времени выполнения JavaScript (узел и браузер).Это отлично подходит для совместного использования, но это происходит за счет путаницы, так как некоторые методы страницы потребуют от вас явной передачи ссылок (вместо того, чтобы делать это с замыканиями или подъемом).
Например, в то время какиспользуя page.evaluate
глубоко в недрах протокола, это буквально stringifies
функция и передает ее в Chrome, так что такие вещи, как замыкания и подъемы, вообще не будут работать.Если вам нужно передать некоторые ссылки или значения в вызов оценки, просто добавьте их в качестве аргументов, которые обрабатываются правильно.