【问题标题】:Do external libraries make apps slower?外部库会使应用程序变慢吗?
【发布时间】:2010-08-10 19:03:30
【问题描述】:

我正在构建一个从网页中抓取信息的应用程序。为此,我选择使用名为Jsoup 的html 抓取工具,因为它使用起来非常简单。 Jsoup 也依赖于 Apache Commons Lang 库。 (它们总共构成 385kB )。 所以会使用Jsoup来下载页面并解析。

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

我在想内部库会针对 Android 进行优化。

【问题讨论】:

    标签: java android performance jsoup


    【解决方案1】:

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

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

    我花了很多时间优化 jsoup 的解析执行时间和数据提取器方法;当然,如果您找到任何改进它的方法,我会全力以赴。

    【讨论】:

    • 我刚刚发布了 jsoup 1.3.1,没有外部依赖。是 131K;更大一点,因为我添加了一个连接接口,使网页抓取更容易。
    • 为什么不通过将插件转移到jsoup+jsoup++ 等来获得更小的jsoup
    【解决方案2】:

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

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

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

    很有可能您使用的任何外部库都将具有您不需要但包含在内的各种功能以满足其他人的需求。该库的作者并不确切知道每个用户都在做什么,因此他们必须以一般方式进行优化。因此,如果您编写自己的代码,就可以让它完全满足您的需要,仅此而已,并根据您的需要进行优化。

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 不,它们不是为 Android 平台制作的。
      【解决方案4】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-02
        • 1970-01-01
        • 2014-10-05
        • 2019-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        相关资源
        最近更新 更多