Faut-il fuir Cordova et Ionic ?

hybrid-dev

Disclaimer - Cet article présente un avis très orienté (le mien). Il n'a - en aucun cas - pour but de manquer de respect au travail (bénévole !) accompli par les équipes des projets cités ci-après. Je tente cependant d'écrire une critique juste et précise sur les raisons techniques qui me poussent à dresser un bilan moyennement positif (pour ne pas dire plutôt négatif) du développement hybride avec Cordova.


Introduction

Après deux ans d'utilisation assez intensive de la stack Cordova & Ionic 1 (AngularJS), dans le cadre d'une application mobile en production (et de différentes expérimentations personnelles), j'ai tenu à dresser un bilan de cette expérience avec Cordova (Android, iOS, ainsi que Webapp). L'enjeu n'est donc pas de définir quelle est la meilleure technologie de développement mobile/hybride, ni de déterminer si Cordova est un mauvais choix technique, mais simplement de partager certains ressentis.


Cordova

cordova

La promesse

Emballer et livrer une application web dans une coquille native, avec des fonctionnalités natives. C'est évidemment très vendeur. C'était déjà le cas il y a 9 ans (PhoneGap, 2009), c'est d'autant plus vrai aujourd'hui, après l'explosion du JavaScript et l'avènement des navigateurs "modernes". Comme je l'exposais dans mon premier article, Cordova offre la possibilité de développer une seule codebase pour couvrir les 3 plateformes principales (Android, iOS, et le navigateur) : un véritable atout pour n'importe quel projet, n'importe quelle entreprise.

Les faits

feels-native

En pratique, cette "technique" présente certains inconvénients :

  • Un lancement de l'application relativement long (2 à 3 secondes incompressibles, au mieux).
  • Des performances très variables selon l'appareil et (surtout) son système d'exploitation.
  • Quelques limitations techniques difficiles à contourner :
    • Plugins natifs utilisables au bout de 3 "bonnes" secondes.
    • Obligation d'embarquer CrossWalk pour un support décent d'Android 4+, et donc de produire deux APK pour le Play Store // projet, par ailleurs, abandonné... Fort heureusement, la part de marché des "vieilles" versions d'Android décroît rapidement.
    • Consommation excessive de RAM de l'UIWebView (webview utilisée par défaut sur iOS), qui, parfois, entraîne l'effacement complet des données enregistrées dans localstorage.
    • Bugs et régressions accompagnants l'alternative plus moderne (WKWebView) : pas d'exécution de JavaScript si l'application n'est pas au premier plan, utilisation d'un serveur web local, incompatibilité de certains plugins...
  • L'instabilité de certains plugins, le manque de réactivité des équipes en charge d'accepter les pull requests et de traiter les bug reports... Soyez prêts à fork les plugins et à maintenir à jour vous-même les patchs de ces derniers, au détriment d'une bonne gestion de vos dépendances.

Bien sûr, viennent aussi les avantages :

  • Votre application mobile peut rapidement devenir une véritable PWA, à l'aide d'un manifeste et de quelques optimisations.
  • Une seule codebase, avec relativement peu de code spécifique à une seule plateforme. On peut même facilement imaginer l'intégration d'une version web "desktop" au projet (ou, en tout cas, de mettre en commun une grande partie du code).
  • Le hot code push, qui permet une mise à jour (du code web) de l'application sans avoir à passer par le processus de validation des stores.

(Listes non exhaustives)


Ionic

ionic

La première version du framework était un succès en demi-teinte, bien que très populaire et ayant largement contribué à la notoriété du "produit". En effet, de nombreux bugs ont été ignorés par les développeurs, et il reste encore, à l'heure actuelle, de nombreuses pull requests et issues en suspend sur le dépôt github d'ionic v1 (totalement abandonné). Il en va de même pour la version initiale de l'Ionic "cloud" et de ses services.
Cependant, depuis, l'équipe d'Ionic a fait de fabuleux progrès et s'apprête à proposer une version 4 totalement framework agnostic de son jeu de composants mobiles. Aurevoir, donc, l'obligation d'utiliser Angular, entre autre grâce à un autre de leurs projets : Stencil. Avec Ionic Native, l'équipe tente de regrouper un maximum de plugins considérés fiables et parfaitement fonctionnels, en plus de faciliter leur utilisation via des interfaces/API TypeScript.
Profitant des derniers progrès et outils du développement web, l'environnement (frameworks & toolings) permet désormais de produire une PWA parfaitement optimisée.
Cerise sur le gâteau : les développeurs ont récemment annoncé travailler sur une alternative à Cordova, dont le nom de code est (pour l'instant) "Avocado".


Conclusion

À l'heure actuelle, malgré les annonces très prometteuses de l'équipe Ionic, je ne pense pas que Cordova représente le futur du développement mobile. J'ose espérer, cependant, que le projet "Avocado" me fera mentir, si bien sur le plan des performances que sur la robustesse des plugins qui l'accompagneront. Ce dernier ne pourra pas, par contre, corriger les problèmes des webviews (trop lente sur Android, inadaptée sur iOS).
En attendant, n'ayant pas été conquis par NativeScript, je pense m'orienter rapidement vers React Native.