• # Euh... tu déconnes ?

    Posté par (site web personnel) . En réponse au message Pourquoi c'est dur de coder un navigateur Internet ?. Évalué à 10.

    Un navigateur, il n'a pas beaucoup plus complexe comme logiciel "grand public" en terme de choses à gérer (si on exclut les gros jeux vidéos).

    Déjà au niveau des normes et standards à supporter ou qu'il est fortement conseillé de supporter au moins dans des versions light (et leur différentes versions) :
    - HTTP : 1.0, 1.1, bientôt 2.0
    - SPDY
    - HTML : 1.0, 2.0, 3.2, 4.0, 4.0.1 et 5 qui est une espèce de rolling-release.
    - XHTML : 1.0, 1.1, bientôt 2.0
    - SSL
    - TLS
    - CSS : 1.0, 2.0, 2.1 et 3.0 encore en cours de spécification.
    - XSL
    - XML
    - XPath
    - XQuery
    - JSON
    - MathML
    - SVG
    - Image : GIF, JPEG, PNG, ANG, MNG,...
    - Audio : MP3, OGG, WAVE, AAC,...
    - Video : H.264, WEBM,...
    - Javascript
    - WebGL
    - Canvas
    - DOM
    - File
    - Ftp
    - Les encodages : ISO-8859-15, UTF-8,...
    - RSS
    - Atom
    - Cookie
    - Local storage
    - XBEL
    - ...

    Et ces normes sont très loin d'être simples (contrairement à ce que croient les anciens développeurs COBOL passés chef de projet ou DSI). Il suffit d'aller se taper les spécifications de chacun d'eux pour comprendre.

    Qui plus est, certains formats n'ont pas prévu de gestions d'erreurs (HTML avant la version 5) dont les navigateurs doivent pallier à toutes les conneries sur lesquelles ils peuvent tomber afin que la page s'affiche tout de même. En html5, le "comment gérer les erreurs" a le mérite de faire partie de la norme.

    Là où quand un traitement de texte ouvrant un fichier corrompu affiche le plus souvent un message d'erreur indiquant "Je peux pas l'ouvrir", un navigateur doit afficher quelque chose. Je pense que cette gestion d'erreurs doit représenter une partie énorme du code.

    Les navigateurs ont aussi des algorithmes divers et variés pour pallier les autres conneries des développeurs comme ne pas spécifier d'encodage. C'est loin d'être trivial car ça marche à coup de statistiques de présence de certains caractères et de détections de mots. Et il y a aussi les modes dégradés qui s'activent quand le code HTML est détecté comme mal fait : sans DOCTYPE,... (Mode Quirks).

    Et des onglets ! Un navigateur sans onglets c'est devenu has been ;)

    A cela s'ajoute la gestion d'add-ons et de plugins avec des bacs à sables pour sécuriser tout ça et de plus en plus souvent des outils de développeurs intégrés (Parcourir le DOM, les CSS appliqués à chaque élément, un profileur mémoire, un débogueur JS,...). Et certains navigateurs ont intégrés des lecteurs PDF. On a aussi le spell-checker intégré.

    Perso, je suis admiratif des équipes qui travaille dans le développement des navigateurs et de leurs moteurs (de rendu ou JS). Déjà que de mon coté j'arrive pas à assimiler toutes les technos qui arrivent :)

    Et puis une des preuves du boulot effectué par exemple dans l'amélioration des performances et l'arrivée (réelle, car il y avait si je ne me trompe des essais avortés dans le passé) de Javascript coté serveur via NodeJS. C'est devenu suffisamment robuste pour servir des applications webs. Un truc démentiel il y a peu.

    Bref, j'arrête là mais voit un navigateur comme une œuvre d'art informatique !

    L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire