Facebook a tenu cette semaine à San José sa 2ème conférence développeurs @Scale. La communauté qu’il réunit sur cet événement vient échanger autour des défis que représentent la conception d’applications à déployer vers des millions, voire des milliards d’utilisateurs. Une vingtaine de sessions a donné la parole aux ingénieurs de la plateforme de réseau social, ainsi qu’aux équipes de sociétés en prise directe avec ces challenges comme Microsoft, Google, GitHub, Box, Airbnb, Pinterest, LinkedIn ou Netflix, notamment.

Les interventions se sont articulées autour de trois parcours : la mobilité (fluidité des interfaces, modélisation de données, cycles de d’élaboration et transversalité des apps…), la gestion des données à grande échelle (traitement des flux, infrastructure de cache, stockage évolutif, bases de type graphe, entrepôts massifs) et les outils de développement. Dans ce troisième domaine, Facebook a fait plusieurs apports intéressants. Lors de la keynote d’ouverture, Jay Parikh, responsable du développement de la société, a d’abord annoncé React Native pour Android, versée dans l’Open Source. La bibliothèque JavaScript s’ajoute à React Native pour iOS, livrée l’an dernier pour créer des interfaces utilisateurs sur les apps mobiles natives, comme la bibliothèque React permettait déjà de le faire pour les applications web (créée en mai 2013 par Facebook et Instagram).

React Native supporte UITabBar et Drawer

Facebook utilise React Native en production depuis plus d’un an, indique deux de ses ingénieurs dans un billet. Les développeurs créent des applications web, iOS ou Android avec le même cœur de code. Ils utilisent des composants déclaratifs, contenant l’interface utilisateur et permettent des cycles de développement rapides sur les plateformes mobiles. « Il y a un an, nous nous préparions à développer l’app Ads Manager. Notre objectif était de permettre à des millions de personnes passant de la publicité sur Facebook de gérer leurs comptes et de créer de nouvelles publicités au fil de l’eau. Au final, cela a donné non seulement la première app entièrement faite avec React Native, mais aussi la première qui soit cross-plateforme », expliquent Daniel Witte et Philipp von Weitershausen. La bibliothèque supporte l’utilisation de composants standards, tels que UITabBar sur iOS et Drawer sur Android qui peuvent être intégrés dans une app en utilisant des outils complémentaires à React comme TabBarIOS ou DrawerLayoutAndroid. Sur @Scale 2015, Olivia Bishop, engineering manager chez Facebook, a expliqué comment on pouvait développer une app mobile avec React Native en utilisant le framework React.

Etendre le framework Relay au-delà des technologies React

@Scale a aussi servi de relai pour annoncer l’ouverture d’un autre framework JavaScript de Facebook, Relay. Accessible sur GitHub, celui-ci est permet de bâtir avec React des applications tirées par les données. « Il fait pour la récupération de données ce que React fait pour le rendu d’interfaces utilisateur », a résumé à nos confrères d’Infoworld un autre engineering manager de la société, Tom Occhino. La technologie, qui fonctionne aussi avec React Native, facilite la mise au point d’applications performantes, selon Joseph Savona, l’un des ingénieurs intervenant sur le sujet. « Relay regroupe les requêtes », a-t-il notamment expliqué.

En versant Relay dans l’Open Source, Facebook espère que celui-ci pourra s’étendre au-delà des technologies React. Le framework est déclaratif et ne requiert pas une API particulière pour communiquer avec un data store. On utilise GraphQL pour déclarer les pré-requis sur les données, tandis que Relay indique comment et quand aller les chercher. Le langage de requête GraphQL, livré en Open Source en juillet, a été développé par Facebook pour les modèles de données d’applications complexes.

Colocation, mutations, gestion des erreurs

Relay apporte aussi la colocation, qui permet de conserver les requêtes que l’on effectue à côté des vues qui leur sont reliées, les requêtes étant agrégées dans les mêmes échanges réseaux. Le framework accepte aussi les mutations : les données peuvent être transférées sur le client, tandis que le serveur utilise les mutations GraphQL, en fournissant automatiquement l’intégrité sur les données (consistency), en optimisant les mises à jour et la gestion des erreurs.