1

У меня есть компьютеры Ubuntu и телефон Android, и меня всегда удивляет, почему менеджер обновлений по умолчанию в Ubuntu и Google Play на телефоне не обновляет существующие версии приложений, вычисляя разницу между ними и новыми версиями. Я уверен, что это относится и к другим операционным системам (вот почему этот вопрос не задан для энтузиастов Ask Ubuntu или Android)

Рассмотрим, например, последнее обновление (второстепенный выпуск) Карт Google (по состоянию на 18 апреля 2012 г.). В разделе «Что нового» говорится, что он содержит исправление критической ошибки. Можно с уверенностью предположить, что большая часть кода не была изменена, и все же, когда вы обновляете приложение, оно загружает более 6 МБ, как будто это новая установка.

Почему серверы обновлений не могут рассчитать разницу (по-английски) с установленными версиями и отправить только разницу? Неужели так сложно сделать это со всеми версиями? Не будет ли сохраненная пропускная способность основной мотивацией?

Редактировать 6 декабря 2016: Google только что объявил, что собирается использовать патч к файлам для обновлений Android APK - Сохранение данных: уменьшение размера обновлений приложения на 65%

2 ответа2

1

Существует три уровня, на которых вы можете оптимизировать размер загрузки, передавая только diff.

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

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

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

Другая проблема заключается в том, что вы не знаете, какая старая версия будет обновлена. Пользователи могут пропустить промежуточные обновления. Конечно, менеджер пакетов может запросить сервер отправить diff для определенной версии, но это создаст огромную нагрузку на сервер для генерации diff. Я сомневаюсь, что сопровождающие сервера позволят это.

Резюме: то, что можно сделать легко и надежно, уже сделано. Остальное зависит от менеджеров пакетов, которые делают небольшие пакеты, чтобы обновления были небольшими.

0

В принципе, это технически сложно для разработчиков. А пропускная способность дешевая - точнее, счет оплачивается пользователями.

Google Chrome вложил много умных средств в разработку инкрементальных обновлений для двоичных файлов Chrome http://blog.chromium.org/2009/07/smaller-is-faster-and-safer-too.html .

Fedora разработала «delta rpms» для доставки дополнительных обновлений пакетов. Забавно, потому что мой компьютер имеет быстрое сетевое соединение, но медленный процессор, для меня это на самом деле медленнее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .