我正在构建一个从网页上抓取信息的应用。为此,我选择使用名为Jsoup的html scraper,因为它使用起来非常简单。 Jsoup还依赖于Apache Commons Lang libray。 (他们一起共计385kB)。 所以Jsoup将用于下载页面并解析它。
我的问题是,如果使用这些简化库而不是使用Androids内置库,是否会使我的应用程序变慢? (在下载数据和解析方面)。
我在想,内部库会针对Android进行优化。
答案 0 :(得分:8)
jsoup的下一个版本不需要Apache Commons-Lang或任何其他外部依赖项,这会将jar大小降低到115K左右。
在内部,jsoup使用标准的Java库(URL连接,HashMap等),这些库将进行相当好的Android优化。
我花了很多时间来优化jsoup的解析执行时间和数据提取器方法;当然,如果你找到任何方法来改善它,我会全力以赴。
答案 1 :(得分:3)
如果问题是“外部图书馆是否会使我的应用程序变得比我自己编写相同代码的速度慢?”,答案通常是“是的,但不是很多。”
JVM需要一些时间才能加载外部库。库可能具有您未使用的功能或功能,加载这些功能或读取它们需要一些时间。但在大多数情况下,这种差异将是微不足道的,除非你处于一个高度受限的环境中,否则我不会担心它。
如果您的意思是“我能编写的代码能够比外部库更快地执行相同的功能吗?”,答案是“几乎肯定是的,但值得您花时间吗?”
可能的情况是,您使用的任何外部库都将具有您不需要的各种功能,但可以包含这些功能以满足其他人的需求。图书馆的作者并不确切知道每个用户都在做什么,因此他们必须以一般方式进行优化。因此,如果您编写了自己的代码,那么您可以使其完全按照您的需要进行操作,并且可以根据您的需要进行优化。
在你的特定情况下是否值得麻烦是一个大问题。
答案 2 :(得分:1)
外部库还将使用针对Android优化的内部库。我想真正的问题是:你的自定义实现会比这些库的通用实现更快吗?
在大多数情况下,第三方库解决了您要解决的问题,但也解决了您可能不需要解决的其他问题,而这部分可能会影响性能。您必须在重新发明轮子和使用优化代码之间找到平衡,以满足您的基本需求。
此外,如果这些库的设计并未考虑Android平台,请务必对其进行广泛测试。
答案 3 :(得分:1)
这是经典的构建与购买论证。
如果运行时性能对您的应用程序非常重要,那么您应该考虑推出自己的实现或优化库(假设它是开源的。)但是,在您这样做之前,您应该知道性能的好坏。现有的图书馆是。除非你真正使用它并获得一些数据,否则你不会知道。
作为第一步,我建议使用该库并收集有关其性能的数据,或者询问已在Android上使用此库的人员获取性能数据。库可能很慢,但如果它可以接受,那么我想这比自己滚动一样好。
请记住,当您创建自己的实现时,它将花费您的时间和金钱(设计,编码,测试和维护)。因此,您需要权衡运行时性能以便重用并降低开发成本。
编辑:另一个重要的一点是,表演是很多事情的功能。例如,硬件,Android版本和网络。如果您的目标设备运行2.1或更低,使用2.2可以提高性能。另一方面,如果您想要定位所有版本,则必须采用不同的策略。