Как вы уже заметили, ваш код запускает все браузеры параллельно, что перегружает вашу систему. Вы можете либо просматривать каждый URL один за другим (вариант 1), либо использовать пул браузеров для ускорения процесса (вариант 2).
Вариант 1
Запускает один браузер и посещает все страницы одну за другой:
const puppeteer = require('puppeteer');
const fs = require('fs');
const lines = fs.readFileSync('varnish-warmer.txt').toString().split('\n');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
for (const line of lines) {
await page.goto(line);
await page.waitFor(1000);
}
await browser.close();
})();
Вариант 2
Поскольку для варианта 1 может потребоваться некоторое время для 1000 URL-адресов, вы можете использовать пул браузеров для параллельного посещения страниц и ускорения процесса. Для этого вы можете использовать puppeteer-cluster (отказ от ответственности: я автор библиотеки).
const { Cluster } = require('puppeteer-cluster');
const fs = require('fs');
(async () => {
const cluster = await Cluster.launch({
concurrency: Cluster.CONCURRENCY_BROWSER,
maxConcurrency: 10, // how many URLs should be visited in parallel
// monitor: true, // uncomment to see information about progress
});
// Define the task for each URL
await cluster.task(async ({ page, data: url }) => {
await page.goto(url);
await page.waitFor(1000);
});
// Queue the URLs
const lines = fs.readFileSync('varnish-warmer.txt').toString().split('\n');
lines.forEach(line => cluster.queue(line));
// Wait for the tasks to finish and close the cluster after that
await cluster.idle();
await cluster.close();
})();
Вы можете поиграть со значением maxConcurrency
, чтобы изменить количество рабочих в зависимости от возможностей (ЦП / память) вашей системы.