2010-08-10 27 views
4

我正在構建一個應用程序,從網頁上刮取信息。爲此,我選擇使用名爲Jsoup的html刮板,因爲它非常易於使用。 Jsoup也依賴於Apache Commons Lang libray。 (他們共計總共385kB)。 所以Jsoup將被用來下載頁面並解析它。外部庫是否使應用程序更慢?

我的問題是,如果使用這些簡化庫而不是使用Android內置庫,會使我的應用程序變慢? (就下載數據和解析而言)。

我在想內部庫會針對Android進行優化。

回答

3

如果問題是,「外部庫會使我的應用程序比我自己寫相同的代碼慢嗎?」,答案通常是:「是的,但不是很多。「

加載外部庫需要一段時間JVM很可能是庫中沒有使用的函數或特性,加載這些函數或讀取它們需要一些時間,但在大多數情況下這種差異將是微不足道的,除非你處於高度約束的環境中,否則我不會擔心它。

如果你的意思是「我可以編寫能比外部庫更快地完成相同功能的代碼嗎? 「的答案是,」幾乎肯定是的,但它是值得你的時間嗎?「

可能性是,你使用的任何外部庫將具有各種功能,你不需要但包含在內以容納他人的需要。圖書館的作者並不確切知道每個用戶的要求,因此他們必須以一般方式進行優化。所以,如果你編寫自己的代碼,你可以使它完全按照你所需要的去做,而不用再做更多的事情,並且可以根據你的要求進行優化。

是否值得在特定情況下遇到麻煩是一個大問題。

1

外部庫也將使用針對Android進行了優化的內部庫。我想真正的問題是:你的自定義實現會比這些庫的通用實現更快嗎?

在大多數情況下,第三方庫解決了您想要解決的問題,但也解決了其他可能不需要解決的問題,而這可能會影響性能。您必須在重新發明輪子和使用優化代碼之間找到平衡,才能滿足您的基本需求。

此外,如果這些庫沒有考慮到Android平臺的設計,請務必廣泛測試它們。

+0

不,它們不是針對Android平臺的。 – droidgren 2010-08-10 19:42:58

1

這是傳統的構建vs購買的論點。

如果運行時間性能對於您的應用程序非常重要,那麼您應該考慮推出自己的實現或優化庫(假設它是開源的)。但是,在這之前,您應該知道其性能的好壞。現有的圖書館是。除非你真的使用它並獲取一些數據,否則你不會知道。

作爲第一步,我會建議使用該庫並收集有關其性能的數據,或詢問已經在Android上使用此庫以獲取性能數字的人員。圖書館可能會很慢,但如果它是可以接受的,那麼我認爲它比單獨滾動要好。

請記住,當您創建自己的實現時,它會花費您的時間和金錢(設計,編碼,測試和維護)。因此,您將爲運行時性能進行重用並降低開發成本。

編輯:另一個重要的一點是,性能是許多事情的功能。例如,硬件,Android版本和網絡。如果您的目標設備運行2.1或更低,並且您可能會使用2.2來提升性能。另一方面,如果您想要定位所有版本,則必須採用不同的策略。

8

jsoup的下一個版本將不需要Apache Commons-Lang或任何其他外部依賴項,從而將jar大小降低到115K左右。

在內部,jsoup使用標準的Java庫(URL連接,HashMap等),這些都將被相當不錯的Android優化。

我花了很多時間優化jsoup的解析執行時間和數據提取方法;當然,如果你找到任何改進它的方法,我都會聽。

+4

我剛剛發佈了jsoup 1.3.1,沒有外部依賴關係。它是131K;有點大,因爲我添加了一個連接界面,使網絡抓取更容易。 – 2010-08-23 10:18:55

相關問題