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

5
我正在开发一款从网页中获取信息的应用程序。为此,我选择了一个名为Jsoup的HTML解析器,因为它非常简单易用。Jsoup还依赖于Apache Commons Lang库。(它们一起总共占用385kB的空间)。因此,Jsoup将被用来下载页面并解析它。
我的问题是,使用这些简化的库,而不是使用Android内置的库,会使我的应用程序变慢吗?(就数据下载和解析而言)
我想,内部库会经过Android优化。
4个回答

8
下一版的jsoup将不再需要Apache Commons-Lang或其他外部依赖项,这将使jar文件大小降至约115K。
在内部,jsoup使用标准的Java库(URL连接、HashMap等),它们将被合理地优化为Android。
我花了很多时间来优化jsoup的解析执行时间和数据提取方法;如果您发现任何改进的方法,我将非常乐意听取。

4
我刚刚发布了 jsoup 1.3.1 版本,不需要外部依赖。它的大小为 131K;稍微有点大是因为我添加了连接接口,以使网页抓取更容易。 - Jonathan Hedley
为什么不将插件移动到jsoup+jsoup++等较小的版本,从而使jsoup更小? - Pacerier

3
如果问题是“使用外部库是否会比我自己编写相同的代码使应用程序变慢?”,一般的答案是“是的,但影响不大”。
加载外部库需要JVM一些时间。很可能该库具有您未使用的功能或特性,加载这些或读取它们会花费一些时间。但在大多数情况下,这种差异微不足道,并且除非您处于高度受限制的环境中,否则不必担心。
如果您的意思是“我能写出执行相同功能的代码,比使用外部库更快吗?”,那么答案是“几乎肯定可以,但这值得你投入时间吗?”
您使用的任何外部库都可能具有各种您不需要的功能,但包含以适应他人需求。库的作者不知道每个用户正在做什么,因此必须以一般方式进行优化。因此,如果您编写自己的代码,可以使其完全符合您的需求,没有多余的内容,并针对您正在处理的内容进行优化。
在您的特定情况下是否值得麻烦,这是一个大问题。

1

外部库也将使用为Android优化的内部库。我想真正的问题是:您的自定义实现是否比这些库的通用实现更快?

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

此外,如果这些库没有考虑到Android平台,请务必进行广泛测试。


1
不,它们并不是为Android平台开发的。 - droidgren

1

这是经典的自建 vs 购买争论。

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

作为第一步,我建议使用该库并收集有关其性能的数据,或者询问已在 Android 上使用此库的某人以获取性能数字。该库可能很慢,但如果它是可接受的,那么我想这比自己编写一个更好。

请记住,当您创建自己的实现时,它将花费您的时间和金钱(设计、编码、测试和维护)。因此,您正在权衡运行时性能与重用和减少开发成本之间的关系。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接