Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 外部库会使应用程序变慢吗?_Java_Android_Performance_Jsoup - Fatal编程技术网

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

Java 外部库会使应用程序变慢吗?,java,android,performance,jsoup,Java,Android,Performance,Jsoup,我正在构建一个应用程序,可以从网页中获取信息。为了做到这一点,我选择使用一个名为的html scraper,因为它使用起来非常简单。Jsoup还依赖于apachecommons语言库。(它们总共构成385kB)。 因此,Jsoup将用于下载页面并对其进行解析 我的问题是,如果使用这些简化库而不是使用Androids内置库,是否会使我的应用程序速度变慢?(在下载数据和解析方面) 我认为内部库将针对Android进行优化。外部库也将使用针对Android进行优化的内部库。我想真正的问题是:您的自定义

我正在构建一个应用程序,可以从网页中获取信息。为了做到这一点,我选择使用一个名为的html scraper,因为它使用起来非常简单。Jsoup还依赖于apachecommons语言库。(它们总共构成385kB)。 因此,Jsoup将用于下载页面并对其进行解析

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


我认为内部库将针对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