Estoy utilizando herramientas basadas en webkit para construir un navegador sin cabeza para rastrear páginas web (lo necesito porque me gustaría evaluar el javascript encontrado en las páginas y buscar la página final). Pero, los dos sistemas diferentes que he implementado hasta ahora muestran un rendimiento muy bajo. He implementado dos sistemas diferentes, los cuales usan WebKit como backend:Uso de webkit para la exploración sin cabeza
- el uso de Google Chrome: Me gustaría empezar Google Chrome y comunicarse con cada uno de tabulación con WebSockets expuestos por Chrome para la depuración remota (debugging over wire). De esta forma puedo controlar cada pestaña, cargar una página nueva y una vez que la página está cargada, obtengo el DOM de la página web cargada.
- Usando phantomjs: phantomjs usa webkit para cargar páginas y proporciona una opción de navegación sin cabeza. Como se explica en los ejemplos de phantomjs, uso page.open para abrir una nueva URL y luego buscar el dom una vez que se carga la página mediante la evaluación de javascript en la página.
Mi objetivo es rastrear las páginas lo más rápido que pueda y si la página no se carga en los primeros 10 segundos, declare que falló y continúe. Entiendo que cada página tarda un poco en cargarse, así que para aumentar el número de páginas que cargo por segundo, abro muchas pestañas en Chrome o comienzo varios procesos paralelos usando phantomjs. El siguiente es el rendimiento que observo:
- Si abro más de 20 pestañas en las instancias de Chrome/20 phantomjs, el uso de la CPU se dispara.
- Debido al alto uso de CPU, muchas páginas tardan más de 10 segundos en cargarse y, por lo tanto, tengo una tasa de fallas más alta (~ 80% de las solicitudes de carga de página)
- Si intento mantener el error en menos más del 5% de las solicitudes totales, no puedo cargar más de 1 URL por segundo.
Después de probar tanto los sistemas basados en webkit, se siente como el cuello de botella es el motor de renderizado WebKit y por lo tanto les gustaría entender de otros usuarios aquí, el número de URLs por segundo que puedo esperar a gatear. Mi configuración de hardware es:
- Procesador: Intel® Core ™ i7-2635QM (1 procesador, 4 núcleos) tarjeta
- Gráficos: AMD Radeon HD 6490M (256)
- memoria: 4 GB
- Red anchura de banda es lo suficientemente bueno para ser capaz de cargar páginas más que el rendimiento que estoy observando
la pregunta que estoy tratando de hacer esta lista de correo es: ¿Alguien tiene experiencia en el uso de WebKit para el rastreo de páginas web de forma aleatoria conjunto de Las URL (por ejemplo, elegir 10k URL de la transmisión de Twitter), ¿cuántas URL puedo razonablemente rastrear por segundo?
Gracias
Voy a saber la respuesta a sus preguntas en un mes más o menos :) Estoy haciendo algo similar (pero quiero evaluar algo más) con 'Node.js' y' PhantomJS'. ¡Mientras tanto, me beneficiaré de las respuestas que puedas obtener! –