Gestionando titiritero para la memoria y el rendimiento.

Estoy usando titiritero para raspar algunas páginas, pero tengo curiosidad sobre cómo administrar esto en producción para una aplicación de nodo. Estaré raspando hasta 500,000 páginas en un día, pero estos trabajos de raspado sucederán a intervalos aleatorios, por lo que no es una sola cola la que pueda hacer.

Lo que me pregunto es: ¿es mejor abrir un navegador, ir a la página y luego cerrar el navegador entre cada trabajo? ¿Qué asumiría que sería mucho más lento, pero tal vez manejar mejor la memoria?

O abro un navegador global cuando se inicia la aplicación, y luego voy a la página, y tengo alguna forma de volcar esa página cuando termine (p. Ej., Cierre todas las tabs en Chrome, pero no cierre Chrome) y luego simplemente ¿Re-abrir una nueva página cuando la necesito? De esta manera, parece que sería más rápido, pero podría potencialmente consumir mucha memoria.

Nunca he trabajado con esta biblioteca, especialmente en un entorno de producción, por lo que no estoy seguro de si hay cosas a las que debo prestar atención.

Si está raspando 500,000 páginas por día (aproximadamente una página cada 0.1728 segundos ), recomendaría abrir una nueva página en una sesión de navegador existente en lugar de abrir una nueva sesión de navegador para cada página.

Puedes abrir y cerrar una página usando el siguiente método:

const page = await browser.newPage(); await page.close(); 

Si decide utilizar un navegador para su proyecto, me aseguraría de implementar procedimientos de manejo de errores para garantizar que si el progtwig falla, tiene un tiempo de inactividad mínimo mientras crea una nueva página , navegador o BrowserContext .

Probablemente desee crear un grupo de varias instancias de Chromium con navegadores independientes. La ventaja de esto es que cuando un navegador falla, todos los demás trabajos pueden seguir ejecutándose. La ventaja de un navegador (con varias páginas) es una ligera ventaja de memoria y CPU, y las cookies se comparten entre sus páginas.

Para automatizar la creación de la agrupación, el manejo de errores y el reinicio del navegador, es posible que desee echar un vistazo a mi biblioteca puppteer-cluster , que se encarga de eso.