J'ai des ordinateurs Ubuntu et un téléphone Android. Je ne comprends donc pas pourquoi le gestionnaire de mise à jour par défaut d'Ubuntu et de Google Play sur le téléphone ne met pas à jour les versions existantes des applications en calculant la différence entre elles et les nouvelles versions. Je suis certain que c'est également le cas avec d'autres systèmes d'exploitation (c'est pourquoi cette question n'appartient pas à Ask Ubuntu ou aux passionnés d'Android)
Considérons, par exemple, la dernière mise à jour (une version mineure) de Google Maps (à compter du 18 avril 2012). La section "Quoi de neuf" indique qu'elle inclut une correction de bogue critique. Il est prudent de supposer que beaucoup de code n'a pas été modifié, et pourtant, lorsque vous mettez à jour l'application, celle-ci télécharge plus de 6 Mo, comme s'il s'agissait d'une nouvelle installation.
Pourquoi les serveurs de mise à jour ne peuvent-ils pas calculer la différence (à la git) avec les versions installées et envoyer uniquement la différence? Est-ce vraiment difficile de faire cela avec toutes les versions? La bande passante économisée ne serait-elle pas une motivation majeure?
modifier 6 déc. 2016: Google vient d'annoncer qu'il utilisera un correctif fichier par fichier pour les mises à jour d'Android APK - Enregistrement des données: réduction de 65% de la taille des mises à jour des applications
Réponses:
Il existe trois niveaux pour lesquels vous pouvez optimiser la taille du téléchargement en transmettant uniquement un diff.
Niveau du paquet Transmettez uniquement les paquets mis à jour. C'est déjà fait. Si vous regardez les tailles de téléchargement des paquets, vous voyez que la plupart d'entre eux sont vraiment petits. Ainsi, cela sécurise le plus de bande passante.
Fichiers dans un package Transmettre uniquement les fichiers modifiés dans un package. La gestion des packages ne se limite pas à la copie de fichiers dans des emplacements fixes. Il existe des fichiers de configuration qui peuvent avoir été automatiquement adaptés à votre système. Il peut y avoir des changements manuels. Il serait difficile de faire la différence de manière fiable sans télécharger au préalable les fichiers installés.
Diffs de fichiers internes La plupart et surtout les gros fichiers sont binaires. Il est difficile d'imaginer un algorithme de correction fiable pour les fichiers binaires si le fichier à corriger comporte une petite modification, telle qu'un horodatage de construction différent, par exemple. Par contre, pour les fichiers texte, les anciens algorithmes de diff et de patch appliqués par git fonctionneraient probablement bien, mais cela ne vaut probablement pas la peine.
Un autre problème serait que vous ne savez pas quelle ancienne version sera mise à jour. Les utilisateurs peuvent avoir ignoré les mises à jour intermédiaires. Bien sûr, le gestionnaire de paquets pourrait demander au serveur d’envoyer un diff à une certaine version, mais cela entraînerait une charge énorme sur le serveur pour générer des diffs. Je doute que les mainteneurs de serveur permettent cela.
Résumé : Ce qui pourrait être fait facilement et de manière fiable est déjà fait. Le reste est aux gestionnaires de paquets de faire de petits paquets pour garder les mises à jour petites.
la source
Principalement, c'est techniquement difficile pour les développeurs. Et la bande passante est bon marché - ou plutôt, la facture est payée par les utilisateurs.
Google Chrome a beaucoup investi dans le développement de mises à jour incrémentielles pour les fichiers binaires Chrome. http://blog.chromium.org/2009/07/smaller-is-faster-and-safer-too.html .
Fedora a développé «delta rpms» pour envoyer des mises à jour incrémentielles de paquets. Curieusement, comme mon ordinateur dispose d’une connexion réseau rapide mais d’un processeur lent, leur installation s’effectue plus lentement.
la source