Quelle interface pour une application moderne?
HTML 5, QML, XAML, des plateformes émergent, chacune avec ses
avantages et ses défauts, et le choix se pose dès lors que l'on
veut réaliser une application Web, une RIA (Rich Internet Application)
ayant la même interface et les mêmes possibilités qu'une
application locale comme le font certains sites populaires.
La crainte de prendre la mauvaise voie et de passer des mois en développement
avec un environnement sur lequel on ne pourrait aboutir tandis qu'un autre
aurait pu s'avérer plus adapté se traduit dans les forums où
la question est très présente.
Le problème se complique encore quand on s'aperçoit que les
différentes solutions proposées ne cessent d'évoluer
et de proposer des fonctionnalités jusque là absentes, et l'on
se demande, sera-t'il possible qu'à l'avenir, telle plateforme offre
les possibilités actuellement offertes par telle autre?
JavaScript et HTML 5
La nouvelle spécification HTML 5 offre une interface universelle pour les applications en lignes et certaines applications locales grâce au mode offline.
Cela est complété par Ajax, qui est la combinaison des techniques formant le HTML dynamique (CSS, JavaScript,
DOM) et de l'objet XMLHttpRequest qui permet l'interaction asynchrone entre le navigateur et
le serveur. Et plus récemment par WebSocket et WebRTC pour une meilleure interaction avec le serveur ou avec directement d'autres clients dans le cas de WebRTC.
L'application utilise un langage de script coté serveur comme PHP
ou ASP ou JavaScript avec Node.js.
Avantages
Portabilité totale: reconnu par tous les navigateurs récents.
Choix de framework très étendu.
Compatibilité avec les standards du Web: JavaScript, CSS, Document
Object Model.
Fonctionne localement sans connexion à un serveur.
Facilité de mise en oeuvre.
Inconvénients
L'utilisation de CSS pour la mise en forme est souvent laborieuse.
Programmer en JavaScript est difficile pour de grands programmes.
Evolutions
L'évolution se fait dans les frameworks, de plus en plus développés
ainsi que dans les nouveaux standards du Web qui sont conçus pour
supporter les applications Web. Le passage progressif de Node.js à ECMASCript 6 facilite la réalisation d'applications pros.
C# et XAML
XAML est comme XUL un langage
de description d'interface basé sur XML. Mais il est vu par Microsoft
comme un moyen de créer des applications Internet riches. Il offre un langage d'interface à Windows avec .NET, Linux avec Mono et et systèmes dérivés de Linux telle la plateforme Android.
Il est utilisé pour l'interface
graphique de Windows depuis Vista, et par Windows 8 et 10 à la fois dans l'interface Modern UI/Metro et sur le bureau classique avec .NET.
Avantages
Très large bibliothèque de fonctions.
Choix du langage de programmation sur la plateforme .NET
Inconvénients
Compatibilité néanmoins limitée. Requiert WPF ou WinRT mais pas sous Windows 10 et Core .NET.
Evolutions
Les applications immersives de Modern UI sur Windows 10 peuvent utiliser XAML. La mise en open source de .NET pourrait donner une nouvelle vie à XAML aussi.
Voir aussi: Quel futur pour XAML?
Java et JavaFX
La solution Java est complète puisqu'elle propose un framework coté serveur, et coté navigateur, l'emploi d'applets, qui sont de petites applications fonctionnant dans la page Web. Cela peut aussi être complété par un langage de script coté serveur, JSP. Ajoutons à cela les servlets pour les services Web et l'on dispose d'une plateforme portable et complète pour les applications Web d'entreprises. JavaFX aide à créer des interfaces graphiques.
Avantages
Bibliothèque de fonctions extrêmement vaste.
Compatibilité avec toutes les plateformes.
Inconvénients
Un runtime doit être installé sur le poste client. Pour les applications Web le serveur
doit supporter Java ce qui implique pratiquement un serveur
dédié.
La programmation Java peut être complexe.
Evolutions
XAMJ, une implémentation de XAML en Java pourrait combiner les avantages
du format XAML avec la portabilité de Java, mais JavaFX est la solution standard pour construire des interfaces.
Qt et QML
Qt est à l'origine un framework d'interfaces pour Linux qui a été porté sur tous systèmes d'exploitation y compris Android et iOS. Il inclut tous les widgets nécessaires à la réalisation d'une interface et à aussi son langage d'interface, QML. Celui-ci a une syntaxe similaire à celle de JSON ce qui le rapproche de JavaFX.
Avantages
Portabilité sur le bureau et le mobile.
Moteur de rendu de documents et interfaces intégré basé sur Chromium.
L'outil de développement Qt Creator facilite la réalisation des applications.
Inconvénients
Le runtime Qt est de taille imposante (au moins 30 Mo). Mais il en est de même pour Java.
La programmation se fait en langage C++ qui permet des applications rapides mais les bugs sont fréquents.
Faire communiquer JavaScript dans l'interface et C++ en backend peut être compliqué.
Evolutions
Un système d'exploitation mobile, Sailfish, est basé uniquement sur Qt. Celui-ci offre la compatibilité Android (qui dispose d'un SDK pour C++), et donc peut remplacer la machine virtuelle Dalvik avec la portabilité en plus.
Tableau récapitulatif
Le choix de l'interface d'application Web pourrait être facilité à l'aide du tableau suivant:
HTML 5 |
XAML |
Qt |
JavaFX |
|
Affichage dans le navigateur |
oui |
non |
oui |
non |
Portabilité système d'exploitation |
oui |
Partielle |
oui |
oui |
Compatible mobiles |
oui |
oui |
oui |
oui |
Utilisation locale (sans connexion) |
oui |
oui |
oui |
oui |
Performance (réactivité) |
Selon |
oui |
oui |
oui |
Gratuité |
oui |
oui |
oui | Selon |
Complexité excessive |
non | non | C++ |
Java |
Noter qu'il est possible de combiner les solutions pour résoudre les carences d'un format. Par exemple, Ajax peut être utilisé coté client en conjonction avec Java coté serveur pour éviter la lenteur des applets. Des frameworks permettent aussi de travailler hors connexion.
Autres solutions
Le langage à balises de dessin vectoriel SVG permet de réaliser des composants graphiques pour une interface d'application Web. Disposer de widgets vectoriels permet de redimensionner l'écran à volonté, et cela convient plutôt pour les applications graphiques ou de jeux, sur le bureau. Les applications Web ou mobiles ne devraient pas utiliser SVG car la compatibilité est imparfaite entre les navigateurs.