Trong quá trình học Node.js, khi mở nhiều trình duyệt cùng lúc với Puppeteer có thể làm máy tính của bạn bị lag, đặc biệt nếu bạn không quản lý tài nguyên một cách hiệu quả. Puppeteer khởi chạy một phiên bản Chromium cho mỗi trình duyệt, và việc này tiêu tốn nhiều tài nguyên hệ thống (CPU, RAM). Dưới đây là một số cách để giảm thiểu tình trạng này:
1. Chạy Node js Puppeteer trong chế độ headless
Chạy Puppeteer trong chế độ headless (không giao diện người dùng) sẽ giảm thiểu việc tiêu tốn tài nguyên hệ thống.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto('https://example.com');
// Thực hiện các thao tác khác...
await browser.close();
})();
2. Giới hạn số lượng trình duyệt mở cùng lúc trong ứng dụng node.js
Sử dụng hàng đợi (queue) để giới hạn số lượng phiên trình duyệt mở cùng lúc. Ví dụ, bạn có thể sử dụng thư viện như async
để quản lý hàng đợi.
const async = require('async');
const puppeteer = require('puppeteer');
const urls = ['https://example.com', 'https://example2.com', 'https://example3.com']; // Danh sách URL để xử lý
const MAX_CONCURRENT_BROWSERS = 5;
const processUrl = async (url) => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto(url);
// Thực hiện các thao tác khác...
await browser.close();
};
const queue = async.queue(async (url, callback) => {
try {
await processUrl(url);
callback();
} catch (error) {
console.error(error);
callback(error);
}
}, MAX_CONCURRENT_BROWSERS);
urls.forEach(url => queue.push(url));
3. Sử dụng một phiên trình duyệt duy nhất với nhiều tab
Thay vì mở nhiều phiên trình duyệt, bạn có thể mở nhiều tab trong một phiên trình duyệt duy nhất.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: true });
const urls = ['https://example.com', 'https://example2.com', 'https://example3.com'];
const pages = await Promise.all(urls.map(async (url) => {
const page = await browser.newPage();
await page.goto(url);
return page;
}));
// Thực hiện các thao tác khác...
await browser.close();
})();
4. Giới hạn tài nguyên của phiên trình duyệt
Bạn có thể giảm thiểu tài nguyên sử dụng bằng cách tắt các tính năng không cần thiết.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: true,
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-accelerated-2d-canvas',
'--disable-gpu'
]
});
const page = await browser.newPage();
await page.goto('https://example.com');
// Thực hiện các thao tác khác...
await browser.close();
})();
5. Giải phóng tài nguyên đúng cách
Đảm bảo rằng bạn đóng các phiên trình duyệt và tab sau khi hoàn thành để giải phóng tài nguyên hệ thống.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto('https://example.com');
// Thực hiện các thao tác khác...
await page.close(); // Đóng tab
await browser.close(); // Đóng trình duyệt
})();
Tổng kết
Bằng cách tối ưu hóa cách bạn khởi chạy và quản lý các phiên trình duyệt, bạn có thể giảm thiểu tình trạng lag máy khi Node.Js sử dụng Puppeteer. Hãy áp dụng các phương pháp trên để quản lý tài nguyên hệ thống hiệu quả hơn.