Делают ли внешние библиотеки медленнее приложений?

Я создаю приложение, которое сбрасывает информацию с веб-страниц. Для этого я решил использовать html-скребок Jsoup, потому что он настолько прост в использовании. Jsoup также зависит от Apache Commons Lang libray. (Вместе они составляют в общей сложности 385 КБ). Поэтому Jsoup будет использоваться для загрузки страницы и ее анализа.

Мой вопрос в том, будет ли использование этих упрощающих библиотек вместо встроенных библиотек Androids замедлить работу моего приложения? (С точки зрения загрузки данных и анализа).

Я думал, что внутренние библиотеки будут оптимизированы для Android.

Если возникает вопрос: «Будут ли внешние библиотеки НАРОЖДЕННЫМ делать приложение медленнее, чем если бы я сам написал тот же код?», Ответ, как правило, «Да, но не очень».

Для загрузки внешней библиотеки потребуется некоторое время JVM. Вполне вероятно, что в библиотеке есть функции или функции, которые вы не используете, и загрузка этих данных или их прочтение займет некоторое время. Но в большинстве случаев это различие будет тривиальным, и я бы не стал беспокоиться об этом, если вы не находитесь в условиях ограниченной среды.

Если вы имеете в виду: «Могу ли я написать код, который будет выполнять ту же функцию быстрее, чем внешняя библиотека?», Ответ: «Почти наверняка, да, но стоит ли вам время?»

Скорее всего, любая внешняя библиотека, которую вы используете, будет иметь всевозможные функции, которые вам не нужны, но включены для удовлетворения потребностей других. Авторы библиотеки не знают точно, что делает каждый пользователь, поэтому они должны оптимизироваться в общем виде. Поэтому, если вы написали свой собственный код, вы можете сделать его именно тем, что вам нужно, и не более того, и быть оптимизированным именно для того, что вы делаете.

Стоит ли проблема в вашем конкретном случае – большой вопрос.

Следующий выпуск jsoup не потребует Apache Commons-Lang или любых других внешних зависимостей, что уменьшает размер банки до 115K.

Внутри jsoup использует стандартные библиотеки Java (URL-соединение, HashMap и т. Д.), Которые будут хорошо оптимизированы для Android.

Я потратил много времени на оптимизацию времени выполнения анализа и обработки данных jsoup; И, конечно, если вы найдете какие-либо способы его улучшить, я все уши.

Внешние библиотеки также будут использовать внутренние библиотеки, оптимизированные для Android. Я предполагаю, что реальный вопрос: будет ли ваша пользовательская реализация быстрее, чем общая реализация этих библиотек?

В большинстве случаев сторонние библиотеки решают проблему, которую вы хотите решить, но также и другие проблемы, которые могут вам не понадобиться, и именно эта часть может повредить производительность. Вы должны найти баланс между переосмыслением колеса и использованием оптимизированного кода только для ваших основных потребностей.

Кроме того, если эти библиотеки не были разработаны с учетом платформы Android, убедитесь, что они тщательно протестировали их.

Это классический аргумент build-vs-buy.

Если производительность во время выполнения действительно важна для вашего приложения, вам следует рассмотреть возможность развертывания собственной реализации или оптимизации библиотеки (при условии, что это открытый исходный код). Однако, прежде чем вы это сделаете, вы должны знать, что хорошо или плохо, производительность существующей библиотеки , Вы не узнаете этого, если не используете его и не получите некоторые данные.

В качестве первого шага я бы рекомендовал использовать библиотеку и собрать данные о ее производительности или спросить кого-то, кто уже использовал эту библиотеку на Android для номеров производительности. Библиотека может быть медленной, но если она приемлема, то я думаю, что это лучше, чем переключение по своему усмотрению.

Имейте в виду, когда вы создаете свою собственную реализацию, это будет стоить ваше время и деньги (дизайн, кодирование, тестирование и обслуживание). Таким образом, вы торгуете с временем выполнения для повторного использования и снижения стоимости разработки.

EDIT: Еще один важный момент заключается в том, что производительность является функцией многих вещей. Например, аппаратное обеспечение, версия Android и сеть. Если ваше целевое устройство работает 2,1 или менее, и вы можете повысить производительность, используя 2.2. С другой стороны, если вы хотите настроить таргетинг на все версии, вам нужно принять другую стратегию.