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

Совсем недавно в интернете появилось несколько интересных инфографик, о том, что популярные приложения для телефонов за пару лет выросли в размере в 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, по которой на конкретный телефон скачивается адаптированная версия приложения без избыточных ресурсов для других версий телефонов.

Метки:
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 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
                              Берримор,
                              Почему мобильные приложения занимают все больше места?


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

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