Domanda

Sto costruendo un app che raschia le informazioni dalle pagine web. Per fare questo ho scelto di utilizzare un raschietto html chiamato Jsoup perché è così semplice da usare. Jsoup dipende anche dalla Apache Commons Lang libray. (Insieme essi costituiscono un totale di 385KB). Così Jsoup sarà utilizzato per scaricare la pagina e analizzarlo.

La mia domanda è se l'uso di queste librerie semplificando, invece di utilizzare Androids built-in librerie, farà la mia app più lento? (In termini di download dei dati e l'analisi).

Io pensavo che le librerie interne sarebbero state ottimizzate per Android.

È stato utile?

Soluzione

Se la domanda è, "sarà librerie esterne INTRINSECAMENTE rendere la mia applicazione più lento se ho scritto lo stesso codice di me stesso?", La risposta è in genere: "Sì, ma non molto."

Ci vorrà la JVM po 'di tempo per caricare una libreria esterna. E 'probabile che la biblioteca ha funzioni o elementi che non si sta utilizzando, e caricando questi o leggere davanti a loro ci vorrà del tempo. Ma nella maggior parte dei casi questa differenza sarà banale, e io non mi preoccuperei a meno che non ci si trova in un ambiente altamente vincolata.

Se quello che vuoi dire è "scrivere il codice posso che farà la stessa funzione più veloce di una libreria esterna?", La risposta è, "Quasi certamente sì, ma vale la pena il vostro tempo?"

Le probabilità sono che qualsiasi libreria esterna si utilizza avrà tutti i tipi di caratteristiche che non ti servono, ma sono inclusi per accogliere i bisogni degli altri. Gli autori della biblioteca non sanno esattamente ciò che ogni utente è fino a in modo da avere per ottimizzare in modo generale. Quindi, se hai scritto il proprio codice, si potrebbe fargli fare esattamente ciò che serve e niente di più, e essere ottimizzati per esattamente quello che stai facendo.

se vale la pena il disturbo nel tuo caso particolare, è la grande domanda.

Altri suggerimenti

La prossima versione di jsoup non richiederà Apache scorta-Lang o altre dipendenze esterne, che abbatte il vaso dimensioni a circa 115K.

Internamente, jsoup utilizza le librerie standard di Java (collegamento URL, HashMap ecc) che stanno per essere ragionevolmente ben Android ottimizzata.

Ho passato una buona quantità di tempo ottimizzando i tempi di esecuzione di analisi ed estrattore dati i metodi di jsoup; e sicuramente se trovate qualche modi per migliorare, io sono tutto orecchi.

Le librerie esterne potranno anche utilizzare le librerie interne che sono ottimizzati per Android. Credo che la vera domanda è: sarebbe la tua implementazione personalizzata essere più veloce l'implementazione generica di queste librerie

?

Nella maggior parte dei casi, librerie di terze parti a risolvere il problema che si vuole risolvere, ma anche altri problemi che potrebbe non essere necessario per risolvere, ed è questa parte che le prestazioni potrebbe ferire. Bisogna trovare l'equilibrio tra reinventare la ruota e l'utilizzo di codice ottimizzato solo per i vostri bisogni di base.

Inoltre, se queste librerie non sono stati progettati con la piattaforma Android in mente, assicuratevi di testarli ampiamente.

E 'la tesi classica accumulo vs-buy.

Se le prestazioni in fase di esecuzione è veramente importante per la vostra applicazione, allora si dovrebbe prendere in considerazione stendere la propria implementazione o l'ottimizzazione della biblioteca (supponendo che è open source.) Tuttavia, prima di farlo si dovrebbe sapere bene o male le prestazioni del libreria esistente è. Non si sa che se non si effettivamente utilizzare e ottenere alcuni dati.

In una prima fase mi consiglia di utilizzare la libreria e Raccogliere i dati che lo riguardano di prestazioni o chiedere a qualcuno che ha già utilizzato questa libreria su Android per i numeri delle prestazioni. La libreria può essere lento, ma se è accettabile allora credo che sia meglio di rotolare uno per conto proprio.

Tenere a mente quando si crea una propria implementazione costerà tempo e denaro (progettazione, codifica, test e manutenzione.) Quindi, si sta operando fuori prestazioni di runtime per il riutilizzo e riduzione dei costi di sviluppo.

EDIT: Un altro punto importante è che le prestazioni è una funzione di molte cose. Ad esempio, l'hardware, la versione Android e la rete. Se il dispositivo di destinazione è in esecuzione 2.1 o meno e si può ottenere un incremento delle prestazioni utilizzando 2.2. D'altra parte, se si desidera raggiungere tutte le versioni è necessario adottare una strategia diversa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top