外部库会使应用程序变慢吗?

我正在构建一个从网页上抓取信息的应用程序。 为此,我选择使用名为Jsoup的html scraper,因为它使用起来非常简单。 Jsoup还依赖于Apache Commons Lang libray。 (他们一起共计385kB)。 所以Jsoup将用于下载页面并解析它。

我的问题是,如果使用这些简化库,而不是使用Androids内置库,是否会使我的应用程序变慢? (在下载数据和解析方面)。

我以为内部库会针对Android进行优化。

如果问题是“外部库是否会使我的应用程序变得比我自己编写相同代码的速度慢?”,答案通常是“是的,但不是很多。”

JVM需要一些时间才能加载外部库。 该库可能具有您未使用的function或function,加载这些function或读取它们将需要一些时间。 但在大多数情况下,这种差异将是微不足道的,除非您处于高度受限的环境中,否则我不会担心。

如果你的意思是,“我能编写的代码能够比外部库更快地执行相同的function吗?”答案是,“几乎肯定是的,但值得你的时间吗?”

可能的情况是,您使用的任何外部库都将具有您不需要的各种function,但可以包含这些function以满足其他人的需求。 图书馆的作者并不确切知道每个用户的具体内容,因此他们必须以一般方式进行优化。 因此,如果您编写了自己的代码,那么您可以使其完全按照您的需要进行操作,并且可以根据您的需要进行优化。

在你的特定情况下是否值得麻烦是一个大问题。

jsoup的下一个版本不需要Apache Commons-Lang或任何其他外部依赖项,这会将jar大小降低到115K左右。

在内部,jsoup使用标准的Java库(URL连接,HashMap等),这些库将进行相当好的Android优化。

我花了很多时间来优化jsoup的解析执行时间和数据提取器方法; 当然,如果你找到任何方法来改善它,我都是耳朵。

外部库还将使用针对Android优化的内部库。 我想真正的问题是:你的自定义实现会比这些库的通用实现更快吗?

在大多数情况下,第三方库解决了您想要解决的问题,但也解决了您可能不需要解决的其他问题,而这部分可能会影响性能。 您必须在重新发明轮子和使用优化代码之间找到平衡,以满足您的基本需求。

此外,如果这些库的设计并未考虑Android平台,请务必对其进行广泛测试。

这是经典的构建与购买论证。

如果运行时性能对于您的应用程序非常重要,那么您应该考虑推出自己的实现或优化库(假设它是开源的。)但是,在您这样做之前,您应该知道现有库的性能是好还是坏。 。 你不会知道,除非你真正使用它并获得一些数据。

作为第一步,我建议使用该库并收集有关其性能的数据,或者询问已在Android上使用此库的人员获取性能数据。 图书馆可能很慢,但如果它可以接受,那么我想这比自己滚动一样好。

请记住,当您创建自己的实现时,它将花费您的时间和金钱(设计,编码,测试和维护)。因此,您需要权衡运行时性能以便重用并降低开发成本。

编辑:另一个重点是性能是许多事情的函数。 例如,硬件,Android版本和网络。 如果您的目标设备运行2.1或更低,使用2.2可以提高性能。 另一方面,如果您想要定位所有版本,则必须采用不同的策略。