Por que os aplicativos não são atualizados calculando a diferença?

1

Tenho computadores Ubuntu e Android e sempre fico perplexo porque o gerenciador de atualização padrão no Ubuntu e no Google Play no telefone não atualiza versões existentes de aplicativos calculando a diferença entre eles e as novas versões. Tenho certeza que este é o caso com outros sistemas operacionais também (é por isso que esta pergunta não está em Ask entusiastas Ubuntu ou Android)

Considere, por exemplo, a atualização mais recente (uma versão menor) de Google Maps (a partir de 18 de abril de 2012). A seção "O que há de novo" diz que inclui uma correção de bug crítica. É seguro presumir que muitos códigos não foram modificados e, no entanto, quando você atualiza o aplicativo, ele faz o download de mais de 6 MB, como se fosse uma nova instalação.

Por que os servidores de atualização não podem calcular a diferença (a git) com versões instaladas e enviar apenas a diferença? Pode ser realmente tão difícil fazer isso com todas as versões? A largura de banda salva não seria uma grande motivação?

Editar 06 dez 2016: o Google acaba de anunciar que eles vão usar o patch arquivo-a-arquivo para atualizações APK Android - Salvando Dados: Reduzindo o tamanho das Atualizações do Aplicativo em 65%

    
por WeNeigh 18.04.2012 / 06:16

2 respostas

1

Existem três níveis nos quais você pode otimizar o tamanho do download transmitindo apenas um diff.

Nível do pacote Transmita somente pacotes atualizados. Isso já está feito. Se você olhar para os tamanhos de download dos pacotes, verá que a maioria deles é realmente pequena. Assim, isso protege a maior parte da largura de banda.

Arquivos dentro de um pacote Transmite apenas arquivos alterados dentro de um pacote. O gerenciamento de pacotes é mais do que apenas copiar arquivos para locais fixos. Existem arquivos de configuração que podem ter sido adaptados automaticamente ao seu sistema. Pode haver alterações manuais. Seria difícil descobrir a diferença sem fazer o upload dos arquivos instalados primeiro.

Diferenças entre os arquivos internos A maioria e principalmente os arquivos grandes são binários. É difícil imaginar um algoritmo de correção confiável para arquivos binários se o arquivo a ser corrigido tiver uma pequena alteração como, por exemplo, um registro de data e hora de construção diferente. Para arquivos de texto, por outro lado, os algoritmos antigos de diferenças e patches aplicados pelo git provavelmente funcionariam bem, mas provavelmente não valeria a pena.

Outro problema é que você não sabe qual versão antiga será atualizada. Os usuários podem ter pulado atualizações intermediárias. É claro que o gerenciador de pacotes poderia solicitar que o servidor enviasse um diff para uma determinada versão, mas isso sobrecarregaria o servidor para gerar diffs. Eu duvido que os mantenedores do servidor permitam isso.

Resumo : O que poderia ser feito com facilidade e confiabilidade já está feito. O resto fica a cargo dos gerenciadores de pacotes para fazer pequenos pacotes para manter as atualizações pequenas.

    
por 20.04.2012 / 17:16
0

Principalmente, é tecnicamente difícil para os desenvolvedores. E a largura de banda é barata - ou melhor, a conta é paga pelos usuários.

O Google Chrome investiu muita inteligência no desenvolvimento de atualizações incrementais para binários do Chrome link .

O Fedora desenvolveu o 'delta rpms' para enviar atualizações incrementais de pacotes. Curiosamente, porque o meu computador tem uma conexão de rede rápida, mas um processador lento, eles são realmente mais lentos para mim.

    
por 27.11.2012 / 13:50