Pregunta

Estoy construyendo una aplicación que raspa la información de las páginas web. Para ello he optado por utilizar un rascador de HTML llamado Jsoup porque es muy fácil de usar. Jsoup también depende de Apache Commons Lang libray. (Todos ellos conforman un total de 385kb). Así Jsoup será utilizada para descargar la página y analizarlo.

Mi pregunta es si el uso de estas bibliotecas simplificación, en lugar de utilizar los androides incorporados en las bibliotecas, hará que mi aplicación más lento? (En términos de la descarga de datos y análisis).

Yo pensaba que las bibliotecas internas se han optimizado para Android.

¿Fue útil?

Solución

Si la pregunta es, "bibliotecas externas inherentemente hacer mi aplicación más lenta que si escribía el mismo código de mí mismo?", La respuesta es por lo general, "Sí, pero no mucho."

Se llevará a la JVM algún tiempo para cargar una biblioteca externa. Es probable que la biblioteca tiene funciones o características que no está utilizando, y la carga de éstos o la lectura más allá de ellos tomará algún tiempo. Pero en la mayoría de los casos esta diferencia será trivial, y no me preocupe menos que esté en un entorno altamente restringida.

Si lo que quiere decir es, "¿Puedo escribir código que va a hacer la misma función más rápido que una biblioteca externa?", La respuesta es, "Es casi seguro que sí, pero es digno de su tiempo?"

Las probabilidades son que cualquier biblioteca externa que utilice tendrá todo tipo de características que usted no necesita, pero se incluyen para dar cabida a las necesidades de los demás. Los autores de la biblioteca no saben exactamente lo que cada usuario depende de lo que tiene que optimizar de una manera general. Así que si usted escribió su propio código, que podría hacer que haga exactamente lo que necesita y nada más, y optimizarse para exactamente lo que está haciendo.

si vale la pena la molestia en su caso particular es la gran pregunta.

Otros consejos

La próxima versión de jsoup no requerirá Apache Commons-Lang o cualquier otro dependencias externas, que hace bajar el frasco tamaño de alrededor de 115K.

A nivel interno, jsoup utiliza las bibliotecas estándar de Java (conexión de URL, HashMap etc) que van a ser razonablemente bien Android optimizado.

He pasado una buena cantidad de tiempo en la optimización del tiempo de ejecución de análisis y métodos de extracción de datos de jsoup; y, ciertamente, si encuentra alguna manera de mejorarlo, soy todo oídos.

Las bibliotecas externas también utilizarán las bibliotecas internas que están optimizadas para Android. Supongo que la pregunta real es: ¿sería su implementación personalizada ser más rápido que la aplicación genérica de estas bibliotecas

?

En la mayoría de los casos, las bibliotecas de terceros a resolver el problema que se quiere resolver, sino también otros problemas que puede que no necesite para resolver, y es esta parte que el rendimiento podría lastimar. Usted tiene que encontrar el equilibrio entre reinventar la rueda y el uso de código optimizado sólo para sus necesidades básicas.

Además, si estas bibliotecas no fueron diseñados con la plataforma Android en mente, asegúrese de probarlos ampliamente.

Es el clásico argumento de acumulación vs-compra.

Si el rendimiento de ejecución es muy importante para su aplicación, entonces debería considerar el despliegue de su propia aplicación o la optimización de la biblioteca (asumiendo que es de código abierto.) Sin embargo, antes de hacer eso que usted debe saber bueno o malo el desempeño de la biblioteca existente es. Usted no sabrá que a menos que realmente se utilicen y obtener algunos datos.

Como primer paso que se lo recomendaría el uso de la biblioteca y recopilar datos con respecto a su rendimiento o pedir a alguien que ya ha utilizado esta biblioteca en Android para los números de rendimiento. La biblioteca puede ser lento, pero si es aceptable, entonces yo supongo que es mejor que rodar uno por su cuenta.

Tenga en cuenta al crear su propia aplicación va a costar tiempo y dinero (diseño, codificación, pruebas y mantenimiento.) Así que usted está operando fuera de rendimiento en tiempo de ejecución para su reutilización y la reducción de los costes de desarrollo.

EDIT: Otro punto importante es que el rendimiento es una función de muchas cosas. Por ejemplo, el hardware, la versión de Android y la red. Si el dispositivo de destino está ejecutando 2.1 o menos y es posible obtener una mejora en el rendimiento mediante el uso de 2,2. Por otro lado, si se desea orientar todas las versiones que tiene que adoptar una estrategia diferente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top