Estoy planeando un servicio web interno para mi propio uso que toma un argumento, una URL y devuelve html que representa el DOM resuelto de esa URL. Resuelto, quiero decir que el servicio web primero obtendrá la página en esa URL, luego usará PhantomJS para 'renderizar' la página, y luego devolverá la fuente resultante después de que se ejecuten todas las llamadas DHTML, AJAX, etc. Sin embargo, el lanzamiento de fantasmas por solicitud (lo que estoy haciendo ahora) es manera demasiado lento. Preferiría tener un conjunto de instancias PhantomJS con una siempre disponible para atender la última llamada a mi servicio web.Cómo administrar un 'grupo' de instancias de PhantomJS
¿Se ha hecho algún trabajo en este tipo de cosas con anterioridad? Prefiero basar este servicio web en el trabajo de los demás que escribir un administrador de grupo/servidor proxy http desde cero.
Más contexto: He enumerado los 2 proyectos similares que he visto hasta ahora y por qué he evitado cada uno, dando lugar a esta pregunta sobre la gestión de un conjunto de instancias PhantomJS en su lugar.
jsdom - por lo que he visto, tiene una gran funcionalidad para ejecutar scripts en una página, pero no intenta replicar el comportamiento del navegador, por lo que si lo utilizo como un propósito general "DOM resolver" allí ' d termina siendo una gran cantidad de codificación adicional para manejar todo tipo de casos de bordes, llamadas a eventos, etc. El primer ejemplo que vi fue tener que llamar manualmente a la función onload() de la etiqueta del cuerpo para una aplicación de prueba que configuré usando un nodo . Parecía el comienzo de un profundo agujero de conejo.
Selenium - Simplemente tiene muchas más partes móviles, por lo que configurar un grupo para administrar instancias de navegador de larga duración será más complicado que usar PhantomJS. No necesito ninguno de sus beneficios de macro grabación/scripting. Solo quiero un servicio web que sea tan eficiente para obtener una página web y resolver su DOM como si estuviera navegando a esa URL con un navegador (o incluso más rápido si puedo ignorar imágenes, etc.)
¿Conoce cómo funciona la gestión de colas ¿en detalle? Estoy pensando que está llamando a múltiples solicitudes XHR en la cola ¿verdad?Estoy buscando una solución que realmente mantenga los procesos phantomjs ejecutándose como daemon, en lugar de hacer girar uno cada vez que entre una tarea. – CMCDragonkai
@CMCDragonkai La pregunta menciona que "un conjunto de instancias PhantomJS con una siempre disponible para servir al última llamada a mi servicio web, "lo que implica ejecutar constantemente daemons PhantomJS, pero esta respuesta funcionaría con cualquier caso". Todo lo que hace la función 'async.queue' es asegurarse de que no haya más de un cierto número de llamadas a la función pendientes en un momento dado; lo que haces dentro de esa función depende de ti. –
Eres mi amigo, casi 4 años después, me salvó bastante el dolor de cabeza. – mgmcdermott