2010-08-10 47 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

相关问题