Facebook ouvre les sources de ReDex, son outil d'optimisation des applications Android

Facebook ouvre les sources de ReDex, son outil d’optimisation des applications Android

En ligne, et en ordre

Avatar de l'auteur

Vincent Hermann

Publié dansSociété numérique

14/04/2016
14
Facebook ouvre les sources de ReDex, son outil d'optimisation des applications Android

Facebook, clairement obsédé par l’optimisation du code de ses produits, propose désormais aux développeurs qui le souhaitent un nouvel outil pour leurs applications Android. ReDex a ainsi pour mission d’optimiser le bytecode à la volée, proposant des améliorations de performances allant de 15 à 25 %.

Facebook a profité de sa série d’annonces pour aborder un point qui lui tient à cœur : les performances. Que l’on parle de celles de son site principal ou des applications mobiles, l’éditeur a à cœur de chercher les goulets d’étranglement. Un point intéressant car Facebook n’est pas connu pour proposer les applications les plus légères, qu’il s’agisse de leur poids ou de leur consommation générale.

Accélérer le chargement et la réactivité générale

Parmi sa batterie d’outils utilisés en interne pour optimiser le code, Facebook en possède un dédié au bytecode des applications Android, quand elles sont développées en Java. Le bytecode est pour rappel un code intermédiaire, prenant place entre la source en Java et le langage machine. Il s’agit d’un code précompilé, nécessitant donc moins de travail pour l’appareil mobile. Pour Facebook, il restait nettement de quoi améliorer les performances dans ce domaine, puisque personne n’avait jamais vraiment cherché à optimiser cette partie.

C’est donc ce que fait ReDex : accélérer le bytecode pour le reste notamment plus rapide à lire par l’appareil Android. Selon Facebook, l’ouverture d’une application se fait plus vite à hauteur de 15 % sur un smartphone de 2015, et jusqu’à 25 % sur un modèle de 2011. Facebook indique que le code est « reconfiguré à la volée », la meilleure partie selon l’éditeur étant que l’outil ne réclame aucun travail supplémentaire.

Réduire un effet comparable à la fragmentation

Les développeurs peuvent en effet utiliser ReDex sans rien changer à leur application, ni Google à Android. Il s’agit d’une étape supplémentaire après la précompilation du code. Les mesures prises par ReDex sont donc automatiques. Selon l’ingénieur logiciel Bert Maher, qui présentait la conférence à ce sujet, il suffit littéralement de « lâcher » l’outil dans l’application pour qu’elle y accomplisse son travail.

Plus précisément, le travail se fait sur l’organisation des classes dans les fichiers dex. Sur son billet, l’éditeur explique qu’elles ne sont pas placées dans un ordre optimal, mais littéralement « balancées » de cette manière par la toolchain de compilation. De la même manière qu’un disque dur fragmenté oblige le système à en chercher les différents morceaux, la mémoire du smartphone s’affole alors pour chercher les classes dont l’application a besoin dans sa séquence de démarrage, provoquant des lenteurs, allongeant le temps de lancement, réclamant plus de cycles CPU et donc consommant plus de batterie.

redex

Ce que fait exactement ReDex

Facebook indique par ailleurs que son approche est assez commune pour qui connait l’optimisation classique du code natif. Le concept global se nomme FDO (feedback-directed optimization) et se base sur un ensemble de retours et d’informations récoltés durant des tests se concentrant sur le lancement à froid. L’analyse permet de repérer toutes les classes et d’en définir l’ordre optimal pour accélérer leur enchainement et donc de réduire les opérations réalisées dans la mémoire flash de l’appareil.

L’analyse du bytecode permet à ReDex de voir l’application dans son ensemble. L’outil peut notamment y repérer les interfaces superflues, à savoir toutes celles qui n’ont qu’une seule implémentation, en remontant à travers la hiérarchie des classes. Les interfaces trouvées sont remplacées par des méthodes d’implémentation et les restes sont supprimés. ReDex s’occupe aussi de trouver les éventuelles métadonnées en trop, pour les supprimer.

redex

Transformer « le bytecode en meilleur bytecode »

Cette phase d’optimisation – qui « transforme le bytecode en meilleur bytecode » selon Maher – rejaillit alors de plusieurs manières différentes. Le principal changement est le temps de lancement de l’application, les instructions étant placées dans un ordre plus logique. Autre impact, la réactivité générale de l’application, pouvant grimper de 25 % selon Facebook, qui n’indique pas non plus comment ce score est calculé exactement. Notez par ailleurs que le chiffre sera plus élevé sur les appareils plus anciens.

Enfin, et c’est un point qui devrait intéresser de nombreux développeurs, le passage de ReDex provoque une baisse du poids de l’application. Cette fois par contre, Facebook ne donne aucun chiffre. Sans doute ne vaut mieux-t-il pas : le poids d’une application dépend d’un très grand nombre de facteurs, notamment de la somme des ressources graphiques qui y est présente. L’optimisation agit sur le code fonctionnel de l’application. Dans le cas de sa propre application pour Android, Facebook indique cependant que le poids avait été réduit en novembre de 25 % et qu’elle se lançait jusqu’à 30 % plus rapidement.

Un code open source sous licence BSD

L’outil se trouve désormais sur le dépôt Github de Facebook, en open source et sous licence BSD, relativement souple. ReDex a cependant un certain nombre de dépendances (folly, glog, double-conversion, boost et zlib) et se sert d’autoconf et automake pour la compilation. Des instructions sont données pour aider les développeurs à mettre l’outil en place, mais seulement sous OS X et Ubuntu 14.04 à titre d’exemples.

14
Avatar de l'auteur

Écrit par Vincent Hermann

Tiens, en parlant de ça :

Chiffre et formules mathématiques sur un tableau

CVSS 4.0 : dur, dur, d’être un expert !

C’est comme CVSS 5.0 mais en moins bien

18:17 Sécu 1
Une tête de fusée siglée Starlink.

Starlink accessible à Gaza sous contrôle de l’administration israélienne

Géotechnopolitique

16:37 Web 17
Fibre optique

G-PON, XGS-PON et 50G-PON : jusqu’à 50 Gb/s en fibre optique

Il faudrait déjà généraliser la fibre

16:03 HardWeb 13

Sommaire de l'article

Introduction

Accélérer le chargement et la réactivité générale

Réduire un effet comparable à la fragmentation

Ce que fait exactement ReDex

Transformer « le bytecode en meilleur bytecode »

Un code open source sous licence BSD

Chiffre et formules mathématiques sur un tableau

CVSS 4.0 : dur, dur, d’être un expert !

Sécu 1
Une tête de fusée siglée Starlink.

Starlink accessible à Gaza sous contrôle de l’administration israélienne

Web 17
Fibre optique

G-PON, XGS-PON et 50G-PON : jusqu’à 50 Gb/s en fibre optique

HardWeb 13
Photo d'un immeuble troué de part en part

Règlement sur la cyber-résilience : les instances européennes en passe de conclure un accord

DroitSécu 7
lexique IA parodie

AGI, GPAI, modèles de fondation… de quoi on parle ?

IA 6

#LeBrief : logiciels libres scientifiques, fermeture de compte Google, « fabriquer » des femmes pour l’inclusion

livre dématérialisé

Des chercheurs ont élaboré une technique d’extraction des données d’entrainement de ChatGPT

IAScience 3
Un chien avec des lunettes apprend sur une tablette

Devenir expert en sécurité informatique en 3 clics

Sécu 11
Logo ownCloud

ownCloud : faille béante dans les déploiements conteneurisés utilisant graphapi

Sécu 16
Le SoC Graviton4 d’Amazon AWS posé sur une table

Amazon re:invent : SoC Graviton4 (Arm), instance R8g et Trainium2 pour l’IA

Hard 5
Logo Comcybergend

Guéguerre des polices dans le cyber (OFAC et ComCyberMi)

Sécu 10

#LeBrief : faille 0-day dans Chrome, smartphones à Hong Kong, 25 ans de la Dreamcast

Mur d’OVHcloud à Roubaix, avec le logo OVHcloud

OVHcloud Summit 2023 : SecNumCloud, IA et Local Zones

HardWeb 2
algorithmes de la CAF

Transparence, discriminations : les questions soulevées par l’algorithme de la CAF

IASociété 62

Plainte contre l’alternative paiement ou publicité comportementale de Meta

DroitIA 33
Nuage (pour le cloud) avec de la foudre

Économie de la donnée et services de cloud : l’Arcep renforce ses troupes

DroitWeb 0
De vieux ciseaux posés sur une surface en bois

Plus de 60 % des demandes de suppression reçues par Google émanent de Russie

Société 5
Une vieille boussole posée sur un plan en bois

La Commission européenne et Google proposent deux bases de données de fact-checks

DroitWeb 3

#LeBrief : des fichiers Google Drive disparaissent, FreeBSD 14, caméras camouflées, OnePlus 12

Le poing Dev – round 6

Next 148

Produits dangereux sur le web : nouvelles obligations en vue pour les marketplaces

Droit 9
consommation de l'ia

Usages et frugalité : quelle place pour les IA dans la société de demain ?

IA 12

La NASA établit une liaison laser à 16 millions de km, les essais continuent

Science 17
Concept de CPU

Semi-conducteurs : un important accord entre l’Europe et l’Inde

Hard 7

#LeBrief : PS5 Slim en France, Valeo porte plainte contre NVIDIA, pertes publicitaires X/Twitter

Un mélange entre une réunion d’Anonymous et de tête d’ampoules, pour le meilleur et le pire

651e édition des LIDD : Liens Intelligents Du Dimanche

Web 30
Bannière de Flock avec des bomes sur un fond rouge

#Flock, le grand remplacement par les intelligences artificielles

Flock 34
Un Sébastien transformé en lapin par Flock pour imiter le Quoi de neuf Docteur des Looney Tunes

Quoi de neuf à la rédac’ #9 : LeBrief 2.0, ligne édito, dossiers de fond

Next 65
Pilule rouge et bleue avec des messages codés

Encapsulation de clés et chiffrement d’enveloppes

Sécu 31
Empreinte digital sur une capteur

Empreintes digitales : les capteurs Windows Hello loin d’être exemplaires

Sécu 20

#LeBrief : succès du test d’Ariane 6, réparer plutôt que remplacer, Broadcom finalise le rachat de VMware

Puces en silicium

Apple ne paierait que peu de royalties à Arm pour ses puces

Hard 43

Des logiciels libres scientifiques français à l’honneur

SoftScience 4

Une femme dont le visage se reflète en morceaux dans une série de miroirs.

Pourquoi inclure des femmes si on peut les fabriquer ?

Société 24

Logo de Google sur un ordinateur portable

Google commencera son ménage dans les comptes non utilisés le 1er décembre

Web 7

Commentaires (14)


ndjpoye
Il y a 8 ans

Pas mal. Mais une partie de l’optimisation c’est “faite du code crade, on le purifie” (exemple pour l’interface) <img data-src=" />


tifounon
Il y a 8 ans

Une espace de mashup entre “C’est du propre” et “Maison à vendre”, du nettoyage et du home staging.


Exception
Il y a 8 ans

Tout ce qu’il faut pas faire pour pallier la lourdeur de Java…


Joe Le Boulet
Il y a 8 ans

+1
&nbsp;
C’est bizarre que google ne propose pas déjà un système d’optimisation similaire <img data-src=" />


sephirostoy Abonné
Il y a 8 ans

L’exemple de l’interface ne précise pas s’il existe une seconde implémentation de l’interface dans un autre projet, par exemple de test unitaire et qui n’est donc pas embarqué dans l’appli déployé. Auquel cas, l’interface est utile en temps de debug mais pas dans l’appli final ^^


ndjpoye
Il y a 8 ans

Oui :)

Après tu peut aussi avoir comme raison la réduction du périmètre fonctionnel en cours de dev. Si le code est déjà testé et validé, peut de chance que tu puisses repasser sur ce code là.

C’était pour plaisanter sur le “chiffrage” des possible optimisation.<img data-src=" />


Vekin Abonné
Il y a 8 ans

Java, Java, c’est vite dit. Il ne faut pas oublier que le bytecode généré n’a rien à voir avec celui de Java tel qu’on le connaît et que la VM est également totalement différente. Java, c’est juste le langage manipulé par le développeur, et ce n’est pas le seul qui soit disponible.

Sinon, ProGuard, l’outil de Google ne fait-il pas exactement la même chose ?


CryoGen Abonné
Il y a 8 ans






Vekin a écrit :

Java, Java, c’est vite dit. Il ne faut pas oublier que le bytecode généré n’a rien à voir avec celui de Java tel qu’on le connaît et que la VM est également totalement différente. Java, c’est juste le langage manipulé par le développeur, et ce n’est pas le seul qui soit disponible.

Sinon, ProGuard, l’outil de Google ne fait-il pas exactement la même chose ?



Et puis de l’optimisation “hors code” ca existe aussi en C/C++ … le inlining, déroulement de boucle etc. réalisée par le compilo.



Shywim
Il y a 8 ans

Quand tu vois l’application Android Facebook et qu’ils te proposent leur outils d’optimisation… Hum…


MrVaykadji
Il y a 8 ans

C’est une blague ? Vu leurs applications Android… Seigneur.


WereWindle
Il y a 8 ans






MrVaykadji a écrit :

C’est une blague ? Vu leurs applications Android… Seigneur.


imaginez seulement s’ils ne l’avaient pas utilisé… <img data-src=" />



Perfect Slayer Abonné
Il y a 8 ans

As-tu déjà décompilé leur application ? Je pense que tu devrais y jeter un oeuil avant même de songer remettre en question l’écosystème Android/Java…
C’est tellement mal foutu qu’il y a eu des patchs pour eux dans la VM de l’AOSP !
https://www.facebook.com/notes/facebook-engineering/under-the-hood-dalvik-patch-…


Exception
Il y a 8 ans






MrVaykadji a écrit :

C’est une blague ? Vu leurs applications Android… Seigneur.


En fait ils ont fait un “Facebook Lite”, c’est l’app que les connaisseurs utilisent, le grand public utilise par contre l’usine à gaz.



quicky_2000
Il y a 8 ans






CryoGen a écrit :

Et puis de l’optimisation “hors code” ca existe aussi en C/C++ … le inlining, déroulement de boucle etc. réalisée par le compilo.


C est clair ils reinventent la roue… ils feraient mieux de faire du code natif directement