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?
Respuesta
¿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?"
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
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.
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
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. –
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. –
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.
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.
- 1. ¿Qué se debe usar document.implementation.createHTMLDocument?
- 2. ¿Qué tipo de proyecto se debe crear para C++/CLI?
- 3. ¿Por qué no se debe usar `'` para escapar de comillas simples?
- 4. Por qué debe uno usar el método de fábrica para crear objetos
- 5. ¿En qué casos se debe usar new.env para crear un nuevo entorno?
- 6. ¿Qué se debe usar para verificar la identidad en C++?
- 7. ¿Qué especificador de formato se debe usar para BOOL?
- 8. mod_deflate o mod_gzip, ¿qué se debe usar?
- 9. Scrapy araña no se encuentra el error
- 10. ¿Cuándo NO se debe usar MVVM?
- 11. Mongodb: ¿Qué se debe saber antes de usar?
- 12. ¿Por qué no se puede usar this.type para nuevas instancias?
- 13. ¿Por qué se debe modelar una función de reenvío perfecta?
- 14. ¿Por qué el operador "=" R no se debe usar en las funciones?
- 15. al construir una araña web, ¿deberías usar recursión?
- 16. Creando una araña scrapy genérica
- 17. Uso de una araña de Scrapy para varios sitios web
- 18. Ruby no se puede usar requiere
- 19. ¿Qué se debe hacer para crear una aplicación completa de iOS en idioma tamil?
- 20. ¿Qué adaptador CouchDB para Ruby debería usar?
- 21. ¿Por qué no se puede usar una función no miembro para sobrecargar el operador de asignación?
- 22. Android: por qué debe usar getBaseContext() en lugar de este
- 23. ¿Se debe usar UseLayoutRounding & SnapsToDevicePixels Always?
- 24. ¿Por qué no se recomienda usar herencia múltiple?
- 25. ¿Por qué no se instalará Ruby 1.9.2-head usando RVM?
- 26. ¿Cuándo se debe usar una vista de memoria?
- 27. ¿Por qué no puedo crear una matriz con el tamaño determinado por una variable global?
- 28. Ruby: ¿Por qué 'y no' funciona cuando '&&! (Expr)' no?
- 29. ¿Por qué debería/no debería usar el operador "nuevo" para instanciar una clase, y por qué?
- 30. ¿Qué hace SqlCommand.Prepare() y cuándo se debe usar?
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". –
Ah, y en realidad tampoco está relacionado con programación. Tantas opciones ... –
@Jorg: ¿no son Joel y Jeff discutidores, no Ben? –