Developpez.com

Le Club des Développeurs et IT Pro

"Notre plus grosse erreur a été de trop miser sur le HTML5"

Pour le PDG de Facebook : le standard est-il vraiment prêt pour le mobile ?

Le 2012-09-12 12:32:48, par Hinault Romaric, Responsable .NET
HTML5, le futur standard émergeant du Web tant vanté et mis en avant par les éditeurs de navigateurs aurait au final de grosses faiblesses. Des faiblesses qui ont poussé Facebook à avoir des regrets après son adoption.

Si la norme a fait ses preuves sur les navigateurs de bureaux et dans le domaine des jeux, il reste encore un secteur ou celle-ci a du mal à s’exprimer : le mobile.

Un secteur pour lequel le réseau social Facebook a essentiellement parié sur le HTML5 pour ses applications mobiles afin de profiter d’un standard ouvert multiplateforme, devant faciliter la maintenance des applications pour les différents écosystèmes.

Cependant, Facebook a réalisé de piètres performances économiques sur mobile. S’exprimant pour la première fois depuis l’entrée en bourse de sa société, Mark Zuckerberg, le fondateur et PDG de Facebook, a déclaré lors de la conférence technologique TechCrunch Disrupt à San Francisco que les difficultés de monétisation du réseau social sur le mobile seraient en grande partie dues au HTML5.

"La plus grosse erreur que nous avons faite en tant qu'entreprise a été de trop miser sur le HTML5 par rapport au natif", a expliqué le patron de Facebook. "Sur iOS et Android, vous pouvez faire beaucoup mieux avec le natif, et il nous fallait faire ça."

Zuckerberg a admis avoir perdu deux ans sur le développement des fonctionnalités pour mobile en HTML5, au lieu de se focaliser directement sur le natif pour iOS et Android.

Facebook doit rassurer ses actionnaires, après la chute de moitié de son action depuis son entrée en bourse, et cela doit passer par des revenus sur le mobile supérieurs à ceux sur les ordinateurs pour son patron.

Pour y parvenir, la société compte abandonner le HTML5 pour revenir au natif sur le mobile. Ce qui a déjà été fait pour l’application Facebook sur iOS, qui a été complètement réécrite en Objective-C. Le même chemin sera également emprunté pour Android.




Quelle pourrait être la cause des mauvaises performances du HTML5 sur mobile ? Pour Kim Palllister, directeur d’Intel de la planification de contenu, le niveau de support des fonctionnalités HTML5 par les plateformes mobiles serait très variable comparé au Desktop.

S’exprimant lors du Forum Intel Developer, Pallister a pris pour exemple le score des navigateurs sur le site HTML5Test.com qui évalue le niveau de support du HTML5 sur une échelle de 1 à 500. Tandis que les navigateurs de bureau ont un score oscillant entre 350 et 450, le plus gros score pour un téléphone mobile est de 300 points.

Au final, le véritable problème du HTML5 sur mobile ne se situerait-il pas plus au niveau du support des fonctionnalités que du langage même, sans compter les faibles ressources des terminaux mobiles ?

Source : TechCrunch, Forum Intel Developer
  Discussion forum
65 commentaires
  • CapFlow
    Membre actif
    Qu'en pensez-vous ?

    J'en pense que Facebook s'est pris une grande rouste

    Blagues à part, je trouve que c'est une très belle performance de Sencha.
  • Uther
    Expert éminent sénior
    Envoyé par Flaburgan
    O_o euh excuse moi mais là tu te plantes complètement, Javascript est interprété, il a donc un interpréteur mais pas de machine virtuelle, à la différence justement du Java que l'on trouve dans Android...
    Il faudrait que tu précise tes définitions de VM et interpréteur, parce que pour moi une VM est un interpréteur.

    Envoyé par Flaburgan
    Oui et non. Tout dépend de l'interpréteur, mais en règle générale, une VM a de moins bonnes performances, car même si le langage est compilé en partie, tout l'environnement VM est très lourd (pense au garbage collector et tout ça...).
    La aussi je voudrait bien des explications sur en quoi c'est meilleur, parce qu'un l’interpréteur Javascript à les même besoins qu'une VM classique (Garbage collector, API, ...).

    Envoyé par Freem
    C'est certes totalement hors-sujet, mais ce n'est pas parce que JAVA est le modèle habituel des langages fonctionnant sur une VM et qu'il utilise effectivement des GC que tout langage utilisant une VM doit utiliser un GC.
    Dans le cas qui nous interesse à savoir Javascript, il faut aussi un Garbage Collector donc c'est un très bon point de comparaison.

    Envoyé par Freem
    Mais comme tu dis, il faudrait des benchmark. Le souci de ces trucs étant que les fanatiques du langage qui perd diront que le bench n'est pas équitable car les optimisations du code ont pas coûté le même temps, ou que le bench est pourri de par son concept
    Techniquement je ne vois pas comment le Javascript pourrait entrer en compétition avec le Java en terme de performance brutes, il souffre de plusieurs défauts, qui sont intrinsèques à sa nature :
    - Java est fortement typé ce qui permet des optimisation qui sont complexes et couteuses en temps de compilation voire parfois impossibles en Javascript.
    - Java est compilé en bytecode en amont, alors que javascript doit le faire à la volée
  • Uther
    Expert éminent sénior
    Envoyé par Freem
    Un interpréteur reçoit du code source, le compile et l'exécute.
    A l'origine la notion d'interpréteur est complètement opposée à la notion de compilation en langage machine. L'interpréteur est censé être un programme qui déroule entièrement l’exécution du programme.
    Les premières JVM étaient d'ailleurs de pur interpréteurs, et il existe encore dans les JVM modernes une option pour les forcer a fonctionner ainsi.
    Envoyé par Freem
    Une VM reçoit un binaire destiné à une machine qui n'existe pas, traduit ce code pour la machine réelle, qui va l'exécuter.
    La notion de représentation intermédiaire, ce n'est pas un concept nouveau qui est apparu avec la JVM. La plupart des interpréteurs ont recours depuis bien longtemps des formes intermédiaires, comme par exemple la "tokenisation", pour améliorer les performances.

    Bref je pense que vouloir séparer les notions de "VM" et 'd'interpréteur" est à éviter car elles se recoupent complètement dans le contexte d'aujourd'hui.

    On peut difficilement dire que le Javascript d'un navigateur est seulement interprété. Les moteurs JavaScript modernes tels que V8, IonMokey ou Nitro ont tout d'une JVM. Le Javascript est transformé en bytecode interne et l’interpréteur a recours à la compilation JIT en natif.
    Inversement la JVM java a un fonctionnement hybride. Certaines parties du bytecode sont interprétés alors que d'autres sont compilés en fonction des besoins.
  • SylvainPV
    Rédacteur/Modérateur
    Merci Sencha pour cette démonstration de la totale incohérence du discours de M.Zuckerberg. Il est ridicule de désigner le HTML5 comme responsable des lenteurs de l'application, alors que la plupart des utilisateurs sur Android se sont aperçus que passer par le site mobile (donc à plus forte raison du HTML) via le navigateur était bien plus rapide.

    Le choix technologique du HTML5 ne justifie en rien des pages qui mettent presque une minute à se charger... Si les requêtes et le code sont correctement optimisés, la différence de performance devrait être minime voire insignifiante pour une application et un device de ce type.

    La question du choix web ou natif doit se poser pour chaque projet selon les contraintes budgétaires / cible / pérennité / ressources / scope fonctionnel etc... J'irais même plus loin en disant que la question devrait se poser pour chaque composant de l'application. Car oui, beaucoup ne savent pas ou ont oublié qu'on peut très bien viser au milieu en concevant des applis hybrides : un peu de natif par ci, un peu de HTML par là, pour chercher le meilleur rapport productivité/qualité. Ne prêcher que par le natif ou par le web, ça n'a pas de sens ; toutes les applications ne rentrent pas dans le même moule.
  • Bizarre que cela fasse débat : HTML5 est effectivement en bas de la liste des perfs. Tout en haut , on trouve ASM et C, non seulement ils sont compilés et proches de la machine mais aussi statiques (link) ce qui leur permet d'optimiser le mode d'adressage.
    En outre l'organisation de la mémoire (code et data) est accessible ce qui autorise les traitements d'ensemble et les pointeurs natifs accélèrent drastiquement certains traitements. D'un autre coté , on hérite de bugs plus contrariants et d'un temps de dev plus long..

    A l'autre bout de la liste, on trouve javascript, ses variables typées à l'utilisation, sa garbage collection, sa compilation tardive, ses IO dans le DOM HTML, ses contraintes de compatibilité entre navigateurs..

    J'en oublie surement, HTML javascript ne sera jamais au niveau d'un java ou .net, qui eux même ne pourront jamais rivaliser avec les statiques ASM C Pascal...

    Par contre , on gagne effectivement sur l'indépendance à la plateforme : les multiples indirections qu'on impose au code avant d'être converti en exécutable permettent quand même de l'adapter sur la machine hôte. C'est un vieux débat et un dilemme de toujours pour les développeurs.

    Pour ce qui est du cas Facebook, il est quand même possible que les ratés du HTML5 tout neuf et pas vraiment mature aient pu lui causer un grand tord dans l'année écoulée, question de timing, HTML5 sera bien plus robuste dans quelques années.

    Mais si on le compare à Objective-C ou Java-droid, la cause est entendue, les languages natifs sont définitivement plus fluides et moins consommateurs de ressource.

    Je sais qu'il y a toujours de grands défenseurs des solutions hyper-évoluées comme Javascript , je respecte ça mais le vieux C est toujours le langage le plus employé au monde , ça aussi , c'est respectable
    Objectivement , on ne pourra jamais faire en javascript ce qu'on fait dans un IDE complexe de dev natif, cela va bien plus loin que la seule vitesse d'execution. L'accès direct aux librairies de l'OS a aussi une grande importance
  • Freem
    Membre émérite
    Envoyé par kolodz

    La vraie question que je me pose, c'est :
    Application native mal codé ou fait d'autres trucs en plus ?
    Réponse: application native mal codée.
    Je sais pas si elle en fait plus, mais il suffit de voir un simple détail pour comprendre pourquoi l'appli sencha est plus rapide, et ils le disent dans la vidéo: ils gardent en cache les données, ce qui évite de les recharger pour rien. Moins de bande passante consommée aussi, d'ailleurs, je pense que les utilisateurs de 3G apprécient ce genre de "détails".

    Après, je n'ai pas testé ces applications et ça ne risque pas d'arriver, puisque je n'ai ni smartphone, ni compte facebook
    Je me base donc entièrement sur les commentaires et la vidéo...

    A noter que quand ils sortent que "html5 marche" et quand les gens disent que ça ne marche que sur les navigateurs basés sur webkit et IE10, on se dit qu'il ya p'tet comme un souci. A la rigueur, ça marcherait pas pour opera, mais serait ok pour firefox, je dirais, bon, opera est à la bourre sur certains points et il est "normal" de pas s'emmerder pour 2% de PdM, mais firefox c'est plutôt 25%-30%, non? Soit un utilisateur du web sur 3...

    Pour une techno censée être portable, ça la fout mal, moi je dis.
  • hansaplast
    Membre éclairé
    ça a comme un goût de bouc émissaire...

    en même temps après avoir autant dévissé en bourse et avec toutes les critiques envers leur non monétisation sur mobile, ça semble logique de rejeter la faute sur HTML5...

    bizarrement, a l'origine la refonte de HTML5 vers objective-C était juste pour gagner en réactivité coté appli
  • stailer
    Membre chevronné
    Ok, je viens de tester sur mon IE10 Desktop et en effet ça marche.

    Ce qui renforce un peu ce que je disais plus haut : ils ont clairement "bataillé" à développer cette application pour casser Facebook car ce n'est pas du tout représentatif de leur framework (Sencha Touch)

    La preuve en est, les exemples : http://dev.sencha.com/deploy/touch/examples/

    Rien ne fonctionne sur un navigateur qui n'est pas webkit, c'est une catastrophe...
  • sekaijin
    Expert éminent
    Pour ce qui est des smartphones je ne me prononcerais pas.

    mais pour ce qui est des desktops
    J’utilise Sencha depuis bien longtemps et je suis entièrement d’accord avec le discours de Sencha lorsqu’ils disent que le plus souvent c’est le mode de développement qui est en cause.

    on pense trop souvent que le développent sur le navigateur passe par un développement de pages web avec des enrichissements en JavaScript et CSS.
    or on peut très bien développer ses applis en adoptant les mêmes principes qu’avec le natif MVC KVC DAO etc.

    Quant à la compatibilitité avec les navigateurs même anciens je n’ai pas de pb. il existe encore nombre de IE6 (une vraie plaie) dans mon entreprise et même ces versions-là sont supportées.

    J’ai développé de grosses applications (plusieurs milliers de lignes de codes) dans des boîtes de 100*000 et 200*000 postes et les ralentissements sont toujours venus de la partie serveur.

    Quant à développer sur le navigateur qui serait plus complexe qu’en natif. Je constate que les phantasmes on la vie dure.

    A+JYT
  • sekaijin
    Expert éminent
    Encore une fois, ça n’a pas de sens.

    Les perfs d’une appli se mesurent à l’usage.
    Et il est bien rare que le ralentissement soit dû à la génération de l’affichage.
    Le plus souvent c’est le traitement, la recherche de donnée ou la communication qui sont les plus chronophages.

    il existe bien évidemment des cas où l’affichage est complexe à réaliser et là effectivement une routine dédiée sera toujours beaucoup plus performante que du HTML

    Mais il ne s’agit ici pas de ça. facedebouc affiche 4 textes et images qui se battent en duel ce n’est pas ça qui bouffe les perfs même en HTML
    Même la plus naze des VM fait ça avec des perfs acceptables.

    alors si les perfs obtenues par facedebook avec HTML 5 sont mauvaises il y a fort à parier qu’ils n’ont pas utilisé la techno pour ce qu’elle fait très bien
    Afficher 4 textes et images.

    Dans une appli comme celle-là je dirais que plus de 80% du temps de réaction est hors du HTML/JS soit donc dans la com et le traitement côté serveur.

    Pour afficher un texte formaté en natif ou en HTML ne prends que quelques cycles d’horloge même si la différence entre les deux se compte en milliers de cycles à 3 GHz c’est pinuts.

    Franchement si la diff de perf et telle que facedebouc le dit, il faut qu’ils virrent tous leurs ingénieurs.

    Pour moi c’est un groupe d’ingénieurs qui maitrise une techno et pas l’autre et qui donc à juste titre choisissent celle qu’ils connaissent. ça n’a rien à voir avec les perfs d’une techno ou d’une autre

    A+JYT