Внешние библиотеки делают приложения медленнее?

StackOverflow https://stackoverflow.com/questions/3452467

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

Следующий выпуск jsououp. Не потребуется Apache Commons-lang или любые другие внешние зависимости, которые приводит к размеру банки до около 115k.

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

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

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

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

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

Это классический аргумент Build-VS-Купить.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top