Obs.js installe une forme d’intelligence adaptative à ton site pour qu’il réponde dynamiquement aux capacités de l’appareil ou à la qualité de la connexion de chaque visiteur. Conçu par Harry Roberts, expert en performance web connu pour CSS Wizardry et ayant collaboré avec Google, la BBC ou l’ONU, ce script utilise des API natives comme Battery Status ou Network Information pour enrichir la page de classes CSS reflétant précisément l’état de l’utilisateur  .

Ce fonctionnement confère une adaptabilité fine : si l’utilisateur a une batterie critique, une classe comme .has-battery-critical apparaît sur la balise , et tu peux désactiver animations ou transitions en une règle CSS simple, sans JavaScript supplémentaire  . De même, ton site adapte la qualité des médias selon la connexion — une connexion rapide permet d’afficher des images haute résolution, tandis qu’une connexion lente fait servir des versions compressées  .

L’installation de Obs.js exige qu’il soit placé très tôt dans le en tant que script inline, afin d’intercepter les conditions utilisateur avant tout rendu. Malgré cette exigence d’emplacement stricte, son exécution est ultra légère — environ 1,5 ms sur un Samsung Galaxy A54  . En plus de générer des classes CSS, Obs.js expose un objet window.obs, permettant de recueillir des données pour des outils d’analytics ou de monitoring afin de mieux comprendre et anticiper le comportement des visiteurs  .

L’innovation principale réside dans cette personnalisation temps réel de l’expérience utilisateur à l’aide d’APIs trop souvent ignorées, sans ajouter de complexité notable au développement. On passe d’un site uniforme pour tous à un site caméléon, capable de s’adapter à des contextes très variés et parfois contraignants  .

Toutefois, il existe quelques limites. Premièrement, le support des API diffère selon les navigateurs — Chrome (et plus globalement Chromium) offre une couverture plus complète que certains autres environnements  . Ensuite, la nécessité d’inclure le script inline dans le peut poser des contraintes organisationnelles dans certains projets ou frameworks. Enfin, la granularité des données dépend des capacités de l’API du navigateur ; dans certains cas extrêmes (comme des environnements très restreints ou des politiques de sécurité strictes), ces informations pourraient ne pas être disponibles du tout.

En guise d’exemple, voici un petit extrait de code HTML et CSS illustrant un usage typique avec Obs.js :

<head>
  <script>
    // code de Obs.js à coller ici
  </script>
  <style>
    .has-battery-critical * {
      animation: none !important;
      transition: none !important;
    }
    .has-bandwidth-low img {
      filter: blur(10px);
    }
  </style>
</head>
<body>
  <img src="banner-compress.jpg" alt="Bannière" />
</body>
/* CSS en complément */
.has-connection-capability-strong body img {
  content: url("banner-4k.jpg");
}

Le premier bloc HTML active une dégradation visuelle ou fonctionnelle selon l’état de la batterie ou de la bande passante. Le bloc CSS montre comment servir dynamiquement une image en haute résolution pour les connexions rapides.

En conclusion, Obs.js représente une avancée intéressante pour rendre les sites plus résilients et responsables, en adaptant l’expérience utilisateur aux contraintes matérielles ou réseau. Son usage s’inscrit dans une démarche de performance et d’UX améliorée, sans alourdir le pipeline de développement. Il faut simplement rester attentif à la compatibilité et à l’organisation du chargement du script.

Sources :