Saurez-vous relever le 3ième défi d'AJAX ?
Il y quelques mois maintenant, j'ai eu une discussion passionnée avec un architecte de banque, au sujet problèmes de performance de RIA / AJAX. Et un atelier OCTO sur RIA est l'occasion pour moi de revenir sur ces sujets.
Quoi, vous allez dire, encore "haro sur le baudet" ? En l'occurrence, le baudet a l'allure d'un cheval de course en ce moment: il ne se passe pas 1 mois sans qu'une application qu'on imaginait chasse gardée du monde RDA se trouve déclinée en AJAX avec "par dessus le marché", la "claque": non seulement ça marche, mais ça marche mieux ! 2 à 1, balle au centre !
Ces réussites nous impressionnent d'autant plus l'ont a longtemps cru impossibles ces prouesses techniques.
Quels sont les défis à relever pour accomplir de telles réussites ? Ne suffit il pas de s'équiper de "toolkits" et le tour est joué ?? Faisons un tour du propriétaire. Le premier défi : les compatibilités de CSS, HTML, Javascript, entre marques et versions de navigateurs. Les expériences "DHTML" du Web 1.0 avaient laissé un goût amer d'échec... la problématique semblait "rédhibitoire" à l'époque. Force est de constater que ce 1er défi est relevé aujourd'hui une vraie maturité de pratique des développeurs (qui connaissent les "trucs" de CSS, HTML, Javascript) et par les "frameworks" qui encapsulent une partie de ces complexités.
Le deuxième défi est désormais bien connu des développeurs Javascript de la deuxième heure - ceux qui font l'AJAX d'aujourd'hui: la maitrise du langage Javascript. Patterns avancés très spécifiques à la fois au langage et au contexte du web sont de mises dans le Javascript de 2007. A tel point que si vous n'avez que les notions superficielles, façon années 98-2000, vous ne comprendrez simplement pas les APIs ! Ce défi est désormais bien relevé par 2 moyens assez opposés: soit par une formation sérieuse au langage Javascript (même "sur le tas"), soit en utilisant une technologie de génération à partir d'un code dans votre langage web habituel (java, taglib, .net, asp.net, par ex).
Le 3ième défi est encore peu maitrisé : tenir dans les limites de la machine virtuelle de RIA AJAX. J'en veux pour preuve donc, ce débat passionné précité, et des retours de projets.
Mon interlocuteur me rappelait des tests qu'il avait effectué il y a quelques années et toujours vrais aujourd'hui, où on charge un DOM, des cascades de styles et des blocs de scripts un peu charnus dans les différents navigateurs, et où la fête commence; des dizaines de Mo de mémoire allouée, puis des centaines, aussi des blocages des moteurs, voir même des plantages d'OS...
Oui encore aujourd'hui, ces limites sont tellement fortes, que si vous essayez de traduire en 1 pour 1 un cas d'utilisation RDA en web AJAX, vous êtes certains de vous planter: graves problèmes de performance, de blocage, d'instabilité.
Le 3ième défi est le dernier que les outils ne résolvent pas (encore) pour nous; oui même après toutes ces années, les CPU bi-core et les 7ièmes versions de navigateur, les limites sont toujours très facile à atteindre dès qu'on se 'lâche' sur la complexité, le poids des informations à traiter en simultané. La faute à un couple logiciel / machine virtuelle construit de façon très itérative, anarchique, auto-émergent.
Revenons cependant sur le phénomène observé en introduction: non content de révolutionner l'architecture technique des applis (plus rien à installer, ubiquité totale) les prouesses RIA améliorent en plus l'expérience utilisateur; en regardant de plus près, on dirait bien qu'ils "profitent" de la réécriture pour "repenser" le cas d'utilisation pour le "rénover", le "dépoussiérer".
Pas de doute, l'objectif n'est pas seulement le dépoussiérage mais aussi relever le 3ième défi: repenser le cas d'utilisation, le compacter jusqu'en atteindre son essence, pour le faire rentrer dans les limites de la machine virtuelle. Les 'grands' concepteurs d'AJAX sont très au fait de ces limites, et transforment cette contrainte en moteur à innovation!
Ce 3ième défi fait qu'aujourd'hui il ne suffit pas de savoir "coder" en AJAX - qui passe donc par choisir le bon framework et assurer les bonnes compétences - pour réussir un projet RIA. Il faut aussi s'immiscer dans les cas d'utilisation, surveiller l'empilement de scripts et de styles - oui parfois réécrire plutôt que hériter/cascader ! - pour arriver à une "compacité web" qui conditionne GRANDEMENT l'aboutissement du projet. Remarquons que cette partie n'est pas la chasse gardée des informaticiens, surtout dans la conduite de projet "à la française". Et en plus, la tâche n'est pas forcément aisée... Saurez vous relevez le 3ième défi ?
Epilogue: elle est là, peut être, une des différences les plus grandes entre RIA et RDA.