Java 外部库会使应用程序变慢吗?
我正在构建一个应用程序,可以从网页中获取信息。为了做到这一点,我选择使用一个名为的html scraper,因为它使用起来非常简单。Jsoup还依赖于apachecommons语言库。(它们总共构成385kB)。 因此,Jsoup将用于下载页面并对其进行解析 我的问题是,如果使用这些简化库而不是使用Androids内置库,是否会使我的应用程序速度变慢?(在下载数据和解析方面)Java 外部库会使应用程序变慢吗?,java,android,performance,jsoup,Java,Android,Performance,Jsoup,我正在构建一个应用程序,可以从网页中获取信息。为了做到这一点,我选择使用一个名为的html scraper,因为它使用起来非常简单。Jsoup还依赖于apachecommons语言库。(它们总共构成385kB)。 因此,Jsoup将用于下载页面并对其进行解析 我的问题是,如果使用这些简化库而不是使用Androids内置库,是否会使我的应用程序速度变慢?(在下载数据和解析方面) 我认为内部库将针对Android进行优化。外部库也将使用针对Android进行优化的内部库。我想真正的问题是:您的自定义
我认为内部库将针对Android进行优化。外部库也将使用针对Android进行优化的内部库。我想真正的问题是:您的自定义实现会比这些库的通用实现更快吗 在大多数情况下,第三方库可以解决您想要解决的问题,也可以解决您可能不需要解决的其他问题,而这一部分可能会影响性能。您必须在重新发明轮子和仅为基本需求使用优化代码之间找到平衡
此外,如果这些库的设计没有考虑Android平台,请确保对它们进行广泛的测试。这是经典的build vs buy论点
如果运行时性能对应用程序非常重要,那么您应该考虑推出自己的实现或优化库(假设它是开放源代码)。然而,在这样做之前,您应该知道现有库的性能是好是坏。除非你实际使用它并获得一些数据,否则你不会知道这一点
作为第一步,我建议使用该库并收集有关其性能的数据,或者向已经在Android上使用过该库的人询问性能数字。图书馆可能很慢,但如果可以接受的话,我想它比你自己滚一个要好 请记住,当您创建自己的实现时,它将花费您的时间和金钱(设计、编码、测试和维护)。因此,您正在权衡运行时性能以实现重用和降低开发成本 编辑:另一个重要的观点是,性能是许多因素的函数。例如,硬件、Android版本和网络。如果您的目标设备运行的是2.1或更低版本,则使用2.2可能会提高性能。另一方面,如果您想针对所有版本,则必须采用不同的策略 的下一个版本将不需要Apache Commons Lang或任何其他外部依赖项,这将jar大小降低到115K左右 在内部,jsoup使用标准Java库(URL连接、HashMap等),这些库将得到Android的合理优化 我花了大量时间优化jsoup的解析执行时间和数据提取器方法;当然,如果你能找到任何改进的方法,我洗耳恭听。如果问题是,“外部库是否会让我的应用程序比我自己编写的代码慢?”答案通常是,“是的,但不是很多。” JVM加载外部库需要一些时间。很可能库中有您不使用的函数或功能,加载这些函数或读取这些函数或功能需要一些时间。但在大多数情况下,这种差异将是微不足道的,我不会担心它,除非您处于一个高度受限的环境中 如果您的意思是“我可以编写比外部库更快地完成相同功能的代码吗?”,答案是“几乎可以肯定是的,但是值得您花费时间吗?” 您使用的任何外部库都可能具有各种您不需要的功能,但这些功能都是为了满足其他人的需要而提供的。该库的作者并不确切知道每个用户都在做什么,所以他们必须以一种通用的方式进行优化。因此,如果您编写了自己的代码,您可以让它完全满足您的需要,并且可以根据您的需要进行优化在你的特殊情况下,这是否值得麻烦是一个大问题。不,它们不是为Android平台制造的。我刚刚发布了jsoup 1.3.1,没有外部依赖关系。它是131K;更大一点,因为我添加了一个连接接口,使web抓取更容易。为什么不通过将加载项切换到
jsoup++
,jsoup++
等,来创建一个更小的jsoup
?