Почему мобильные приложения занимают все больше места

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


Инфографика 1
Инфографика 2


Авторы инфографик в оригинальных статьях выделяют две причины такого роста:


  • повышение максимального допустимого размера приложений AppStore
  • оснащение телефонов все большим объемом памяти

На мой взгляд, указанные тезисы являются только предпосылками и до конца не отвечают на вопрос "почему приложения становятся больше?".
Конечно, в первую очередь дело в добавлении новых функций. Развитие функциональности приложений требует большего размера.


Инфографика 3


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


Лишние копии ресурсов в приложении


Как ни банально звучит, но в приложениях часто сохраняются одни и те же внутренние ресурсы (картинки, библиотеки, и так далее) по нескольку копий. Это происходит из-за того, что крупные приложения разрабатываются несколькими командами разработчиками, отвечающими за свой конкретный функционал программы. Бывает так, что команда тащит для своего модуля те же ресурсы, что и другая, вызывая задвоение.


В одной из статей автор решил детально разобрать внутреннее строение приложения Facebook для iOS после того, как оно увеличилось за полгода с 165 до 253 мегабайт. Он обнаружил, что в приложении содержалось свыше 40 мегабайт избыточных дублирующих данных. В основном это были картинки, но также были и абсолютно идентичные внутренние программные файлы. Таким образом, просто удалив дубликаты, можно было бы уменьшить размер приложения на 15% процентов. Что, кстати, Facebook впоследствии и сделал.


А/Б тестирование и внедрение новых функций


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


Переход на более комфортные языки программирования


В случае с приложениями под iOS переход с Objective-C на Swift может дать увеличение размера скомпилированного кода приложения в 3-4 раза. Это происходит из-за того, что ради удобства и скорости разработки новые языки могут:


  • использовать большие типы данных по умолчанию, которые занимают больше места
  • вводить дополнительные тесты и проверки в код при компиляции
  • использовать большую стандартную библиотеку функций

Сюда же можно отнести переход приложений на новые фреймворки, которые тащат с собой много необходимых им файлов.


Включение в программы собственных функций, заменяющих стандартные операционной системы


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


Среди наиболее популярных "велосипедов", заменяющих стандартные средства ОС, можно выделить:


  • Браузеры
  • Работа с камерой
  • Ввод текста и обработка жестов
  • Проверка орфографии

Рост требований к приложениям


По мере развития телефонов владельцы экосистем (Apple, Google) начинают предъявлять к программам новые требования по поддержке системных появляющихся возможностей телефонов, которые требуют больше места:


  • После появления Retina разработчиков обязали добавлять картинки с большей детализацией и соответственно размеров.
  • Переход iOS с 32 на 64 бита впоследствии заставил всех разработчиков выпускать именно 64-битные приложения.

К слову в AppStore для борьбы с ростом размера приложений по таким требованиям потом была представлена технологий App thinning, по которой на конкретный телефон скачивается адаптированная версия приложения без избыточных ресурсов для других версий телефонов.

Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 28
  • +3
    Пишем одно приложеньице под все платформы. Под айос оно весит 70Мб, а UWP — 3Мб. Мне кажется большая часть веса — это неоптимизированные пнг всевозможнных кнопок. В UWP такого нет потому что все иконки шрифтовые. По-моему вес любого айос приложения можно сократить в разы просто прогнав все картинки через какой-нибудь tinypng.
    • +1
      Под айос оно весит 70Мб, а UWP — 3Мб.

      Так вы поди на Xamarin его пишете. И в случае с iOS оно внутри себя содержит цельнотянутый Mono-рантайм.

      • 0
        Никаких замаринов, нативненько пишем.
    • 0
      Все бы хорошо, но большинство приложений из списка выше строятся на веб-технологиях, которые тянутся при необходимости из интернета…
      Ожидал прочитать, как добавляют тонны различных метрик для сбора данных…
      • 0
        … у меня в теле почти все. Причем пользователь не нуждается в постоянном обновлении данных.
        Нужно будет удалить половину.
      • –1
        Размер потихоньку растет сам по себе, ведь добавляются новые функции, изменяется дизайн и тд. А вот чтобы сделать приложение меньше, нужно затратить некие усилия. Учитывая, что телефоны сейчас поддерживают довольно большой объем памяти, это никому не нужно, вот никто этого и не делает.
        Вот и ответ, и не нужно никаких исследований.
      • 0
        Еще можно добавить средства кросс-платформенной разработки например: unity, xamarin, robovm и т.д.
        Каждый кросс-платформенный инструмент тянет в приложение кучу своих собственных либ и биндингов.
        • +6
          Ладно еще сами приложения. Шестой Андроид отказывается скачивать и обновлять приложение весом 5 мб при свободном месте в телефоне >300 мб — потому что ему, видите ли, места нет для этой операции!
          • 0
            Это нормальная практика, потому как возможно два варианта:
            1. Приложение при установке распаковывается из 5 Mb в больший объем и как следствие ограничение в 300 Mb, уж не знаю каким путем выяснили они эту цифру
            2. Многие приложения с таким весом, как правило помимо приведенного выше после установки скачивают доп. файлы весом от 20 Mb до 2Gb
            • 0
              Нет. Именно до скачивания обновления говорит о нехватке места. Как я понимаю, Android резервирует какой то процент от памяти под свои нужды, но при этом показывает его как свободный.
              • +1
                Опытным путем я выяснил, что лимит около 400 мб. С учетом того, что всего в телефоне 8 гб — возможно, они резервируют 5%.
                Но работает этот лимит очень тупо. Если места хоть насколько-то больше лимита — оно даст обновить и большое приложение (по личному опыту, порядка 50-70 мб). Но если места хоть чуть-чуть меньше лимита — оно не даст обновить даже самую крошечную апликуху.
                • 0
                  Android считает что памяти мало если её остается меньше некоего процента от общего объема, вроде 5%.
                  Поэтому если раздел /data, скажем, на 12 Гб (вполне реально), то обновления будут невозможны уже при 500 Мб, что абсурдно.
                  При наличии рута должно помочь указание порога в 0%:
                  http://4pda.ru/forum/index.php?showtopic=468961&view=findpost&p=37448420
                  • 0
                    Поэтому если раздел /data, скажем, на 12 Гб (вполне реально), то обновления будут невозможны уже при 500 Мб, что абсурдно.
                    Это не абсурдно, а правильно и логично. Если забить файловую систему «под завязку», то она будет работать в 10 раз медленнее. Таким простым и нехитрым способом Android этого не допускает и всё работает достаточно быстро.

                    Объяснять что-либо пользователям при этом бесполезно, увы.
                    • 0
                      Тогда почему бы просто не зарезервировать место, чтобы оно не отображалось как свободное? Раз уж им всё равно пользоваться нельзя.
                      А объяснять пользователям надо, в конце концов, телефоны покупают они, а не разработчики
                      • 0
                        Тогда почему бы просто не зарезервировать место, чтобы оно не отображалось как свободное? Раз уж им всё равно пользоваться нельзя.
                        Маркетинг? Или, может, какие-то специфические особенности системы. В «обычном» GNU/Linux зарезервированное место не отображается как свободное и использовать его может только root. Скорее всего с последним возникли проблемы…

                        <blockquote.>А объяснять пользователям надо, в конце концов, телефоны покупают они, а не разработчикиДа — но зачем оно им? Все системы пытавшиеся что-там пользователям обьяснять — вымерли, однако…
                  • 0
                    У меня как-то закончилось место на телефоне, я стал его пытаться освободить,
                    стал смотреть, может данные приложений много место занимают, вроде все данные поудалял, но все равно места нет, а приложения, казалось бы, весят 5-60Мб, места — 6 гб было на чистой системе. Куда делось все место?
                    После рутования выяснилось вот что:
                    Очень много места съедается на dalvik кэш (сейчас уже art), т.е ставишь приложение в 20Мб, а съедается 200Мб. И главное нигде это в файловом менеджере не увидишь, если у вас нет рута, да и если есть надо еще догадаться, куда заглянуть…
                    apk — это архив, при установке он распаковывается, а потом еще и компилируется.
                  • 0
                    Хочется наложить этот график на закон Мура…
                    • 0
                      Тенденция — Нужен анализ по пунктам, и не только в мобиле. А есть просто фиксация факта = пичаль.
                      • 0
                        Тут ещё фактор самих ресурсов, которые используются в приложении. Можно нарисовать визуальную часть контрола программно, а можно загрузить картинку, разница может доходить до порядков. Я всегда привожу 2 примера, которому я не перестаю удивляться и в какой-то мере даже восхищаться, потому что я считаю к такому нужно стремиться. Фейсбук больше 100мб, вконтакте 21.4мб(айфон, для айпэда 15.4(!!)). Фейсбук мессенджер 139мб, телеграм 47мб.
                        • 0
                          Встречал шедевры весом пару мегабайт с горой функционала.
                          • +2

                            Я вам больше скажу, ВКонтакт 3.12 под Андроид весит 9.7М (версия июнь 2015) и имеет всю основную функциональность. И сдается мне, что в текущих версиях новой функциональности и нету.
                            Когда исчерпан функционал, начинаются свистелки и перделки

                          • 0
                            Тоже не понимаю почему приложение facebook весит 300 мегабайт, если ему нужно лишь показывать мобильную версию сайта, а сафари в ios рендерит сайты для любого приложения.
                          • 0

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

                            • 0
                              Берримор,
                              Почему мобильные приложения занимают все больше места?


                              — Говнокодеры, сер

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.