Short Lived Browser (каждый раз открывает новый экземпляр браузера)
Плюсы:
- Новый сеанс открывается каждый раз, один экземпляр не мешает другому.
- Идеально подходит для тестирования нескольких учетных данных на одном и том же / нескольких веб-сайтах.
- Может использовать прокси-сервер для всего экземпляра.
Минусы:
- Нельзя обмениваться даннымимежду двумя экземплярами (если вы не используете
userDataDir
или cookies
). - Требуется больше времени для открытия.
Долгоживущий браузер (общий доступ к одному экземпляру браузера каждый раз)
Плюсы:
- Открытие новой вкладки занимает гораздо меньше времени, чем открытие нового Chrome с пустым профилем.
- Данные легко делятся между двумя экземплярами.Идеально подходит для проверки / тестирования одного и того же веб-сайта с одинаковыми учетными данными.
Минусы:
- Вы не сможете использовать аутентификацию и файлы cookie на одном веб-сайте с использованием других учетных данных.
- Невозможно использовать прокси-сервер для всего экземпляра (в данный момент).
Benchmark
Это тест для запуска только 100 раз.
Код для запуска:
const bench = require("@entrptaher/async-bench");
const puppeteer = require("puppeteer");
const createNewBrowser = async function() {
const finalHtml = "html content...";
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setContent(finalHtml);
await page.pdf({ path: "hn_shortlived.pdf", format: "A4" });
await browser.close();
return true;
};
let longLivedBrowser;
const useExisting = async function() {
const finalHtml = "html content...";
if (!longLivedBrowser) {
longLivedBrowser = await puppeteer.launch();
}
const page = await longLivedBrowser.newPage();
await page.setContent(finalHtml);
await page.pdf({ path: "hn_longlived.pdf", format: "A4" });
await page.close();
return true
};
let longLivedNoNewTab;
const useExitingTab = async function() {
const finalHtml = "html content...";
if (!longLivedNoNewTab) {
longLivedNoNewTab = await puppeteer.launch();
}
const page = (await longLivedNoNewTab.pages())[0];
await page.setContent(finalHtml);
await page.pdf({ path: "hn_longlived.pdf", format: "A4" });
return true
};
const times = 100;
Promise.all([
bench(createNewBrowser, times),
bench(useExisting, times),
bench(useExitingTab, times)
]).then(console.log);
Результат:
[ { meanExecTime: 277.3644104500115,
execTime: 27736.44104500115,
resultOfMethod: true },
{ meanExecTime: 36.89182792000472,
execTime: 3689.1827920004725,
resultOfMethod: true },
{ meanExecTime: 11.07780257999897,
execTime: 1107.780257999897,
resultOfMethod: true } ]
Каждый имеет следующее:
meanExecTime
: Среднийвремя выполнения execTime
: общее время запуска resultOfMethod
: только некоторый результат для идентификации
Тест не завершен, поскольку он неподробности о машине и т. д. Но это определенно показывает, что каждый раз при открытии браузера будет больше времени, даже если это всего лишь 100 раз.
Во второй функции вы также заметите, что открытие новой вкладки требует времени, поэтому для третьей функции, если вы не закроете страницу, это займет еще меньше времени.
Резюме:
- Если вам нужна производительность (11 мс по сравнению с 277 мс), не беспокойтесь о сеансе, перейдите на существующую вкладку.
- Если вы хотите запустить несколько тестов в одном и том же окне параллельно,перейдите на новую вкладку.
- Если вам нужны сеансы и постоянство, перейдите на новый экземпляр браузера.