Внешние библиотеки замедляют работу приложений? - PullRequest
4 голосов
/ 10 августа 2010

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

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

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

Ответы [ 4 ]

8 голосов
/ 11 августа 2010

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

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

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

3 голосов
/ 11 августа 2010

Если вопрос «Внешние библиотеки по своей природе замедлят работу моего приложения, чем если бы я сам писал тот же код?», Ответ обычно будет «Да, но не очень».

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

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

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

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

1 голос
/ 11 августа 2010

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

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

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

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

РЕДАКТИРОВАТЬ: Другой важный момент заключается в том, что производительность зависит от многих факторов. Например, оборудование, версия Android и сеть. Если ваше целевое устройство работает с версией 2.1 или ниже, и вы можете получить повышение производительности с помощью 2.2. С другой стороны, если вы хотите настроить таргетинг на все версии, вы должны принять другую стратегию.

1 голос
/ 10 августа 2010

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

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

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

...