Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wordpress-seo domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/vinascript/html/wp-includes/functions.php on line 6114
Node.js với Puppeteer mở nhiều tab gây tốn tài nguyên hệ thống - VinaScript

Latest Post

Triển khai dự án PHP, Mysql với Nginx trên Docker Tìm hiểu về HTML – Ưu điểm, nhược điểm và cách hoạt động của HTML

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.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *