2010-01-08 15 views
6

En el episodio 78 del podcast Joel & Jeff, uno de los tipos de Doctype/Litmus afirma que nunca querría construir una araña en rubí. ¿A alguien le gustaría adivinar su razonamiento para esto?¿Por qué no se debe usar Ruby para crear una araña?

+1

Propongo esta pregunta para incluirla en las preguntas frecuentes, ya que la propia definición de "subjetivo y argumentativo" * y * "no es una pregunta real". –

+0

Ah, y en realidad tampoco está relacionado con programación. Tantas opciones ... –

+0

@Jorg: ¿no son Joel y Jeff discutidores, no Ben? –

Respuesta

15

¿Cuán rápido debe ser un rastreador, de todos modos? Depende de si está rastreando toda la web en un horario apretado o recopilando datos de unas pocas docenas de páginas en un sitio web.

Con Ruby y la biblioteca nokogiri, puedo leer this page y analizarlo en 0.01 segundos. Usando xpath para extraer datos de la página analizada, puedo convertir todos los datos en objetos específicos del dominio en 0.16 segundos. Todas las 223 filas.

Me encuentro con cada vez menos problemas donde importan las limitaciones tradicionales (cpu/memory/disk). Esta es una era de abundancia. Donde los recursos no son una limitación, no pregunte "qué es mejor para la máquina". Pregunte "¿Qué es mejor para el humano?"

+1

Un rastreador no necesita ser muy rápido si solo está mirando una sola página, pero hay una razón por la que Google todavía usa C. Cuando multiplicas un par de milisegundos de ahorro en un millón de máquinas una y otra vez, rápidamente comienza a sumar. – kejadlen

1

No obtendrás el rendimiento deseado de Ruby. Consulte el enlace al que se hace referencia: http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/

Si bien las pruebas de rendimiento como estas deben tomarse con un grano de sal, hay una diferencia considerable entre Ruby y los idiomas superiores (en velocidad).

Editar: Lástima de mí por responder a una pregunta cargada. En general, elegir un idioma es una serie de compensaciones que abarcan desde el rendimiento hasta las preferencias personales en lo que es eficiente. La belleza de la programación es que todos estos idiomas están disponibles para su uso, de modo que puede probar lo que funciona lo mejor para los requisitos de su proyecto. Mi recomendación es experimentar y ver qué funciona mejor para ti.

+0

ePensé que la velocidad puede ser un problema, aunque ¿por qué una araña necesita ser rápida? Seguramente, mucho de lo que están haciendo está ligado a la red. ¿Cuál sería un lenguaje más adecuado? – Ben

+3

Una araña decente realizará varias tareas (multi-hilo) de modo que mientras que un hilo está esperando que un servidor se active, otros estarán ocupados consultando. Dependiendo de su conexión a Internet, debería poder maximizar su CPU, especialmente porque con suerte estará haciendo algo significativo y exigente desde el punto de vista informático con el contenido de la página una vez que la haya descargado. –

+1

Y el algoritmo específico de Josephus que estaba perfilando no tiene mucho que ver con el problema de la araña. El rendimiento puede ser la razón, y el rubí puede ser demasiado lento, pero este vínculo en particular no tiene nada que ver con eso (como el autor se esfuerza por decir en la parte superior de la publicación). Spidering está dominado por el tráfico de la red, mientras que el problema de Josephus está dominado por el conteo. –

0

Lo que dijo OG. En términos más simples, Ruby es un perro lento y si estás buscando hacer mucho por unidad de tiempo, es la elección incorrecta del idioma.

4

En mi opinión, es solo una cuestión de escala. Si está escribiendo un raspador simple para su propio uso personal o simplemente algo que se ejecutará en una sola máquina un par de veces al día, entonces debe elegir algo que implique menos dolores de código/esfuerzo/mantenimiento. Si eso es ruby ​​es una pregunta diferente (elegiría Groovy sobre Ruby para esta tarea => mejor enhebrado + análisis XML muy conveniente). Si, por otro lado, está raspando terabytes de datos por día, entonces el rendimiento de su aplicación es probablemente más importante que un tiempo de desarrollo más corto.

Por cierto, cualquiera que diga que nunca quiere utilizar alguna tecnología en algún contexto u otro es muy probable que esté mal.

Cuestiones relacionadas