Orluk Photo 2.0

17 février 2023 | 4 mins de lecture

Explication

À plus Gatsby (le magnifique) 👋 Bienvenue Astro (boy) 🚀

Orluk Photo est un projet ambitieux de (re)création d'un blog de A à Z basé sur l'architecture Islands.

L'Architecture Islands !

D'aprĂšs Jason Miller (crĂ©ateur du framework Preact), l'architecture Islands (ou composants Islands) est un concept inventĂ© par Katie Sylor-Miller (architecte frontend chez Etsy). L'idĂ©e est de rendre une page HTML statique sur le serveur et d'injecter des rĂ©gions / des portions de code hautement dynamiques. Ainsi, plusieurs "Ăźles" peuvent coexister sur une mĂȘme page, car chaque Ăźle est rendue de maniĂšre isolĂ©e. C'est au tour du client "d'hydrater" ces Ăźles Ă  la volĂ©e. ConsidĂ©rerez cela comme des Ăźles dans une mer de HTML statique et non interactif.

Développé depuis plus de 3 ans, Orluk Photo commençait à se faire "vieux" avec une architecture JAM Stack basé sur Gatsby V3, Strapi V3 (également) et MongoDB (5.0). J'ai choisi de me tourner vers la modernité avec Astro, Strapi (V4 cette fois-ci), et donc oui, adieux le NoSQL et bonjour Postgres (au passage, la remise en route de mon cerveau pour du SGBDR fût d'une brutalité monstre ! Mais p'tit à p'tit les réflexes reviennent ; à l'image du vélo, le SQL cela ne s'oublie pas...). J'ai également choisi de refondre toute l'interface utilisateur from scratch, merci à la librairie TailwindCSS de m'avoir accompagné là-dessus.

Astro est un framework JavaScript (encore un) tout-en-un, qui permet de construire des sites Web rapidement et axé sur le contenu. Il repose sur les critÚres suivants :

  • Les composants Islands : Une architecture moderne pour Ă©laborer des sites Web rapidement ;
  • Conception d'API Server-First : La possibilitĂ© d'exĂ©cuter les requĂȘtes cĂŽtĂ© serveur, afin d'Ă©viter les "hydratations" couteuses ;
  • Aucun JavaScript, par dĂ©faut : Aucune surcharge d’exĂ©cution JavaScript pouvant ralentir l'application ;
  • Edge-Ready : DĂ©ployer n’importe oĂč, mĂȘme sur un environnement d’exĂ©cution global comme Cloudflare, Deno ou encore Vercel ;
  • Personnalisable : TailwindCSS, MDX "out-of-the-box", et plus d'une centaine autres intĂ©grations Ă  choisir ;
  • UI-Agnostique: Support de React, Preact, Vue, Svelte, Solid, etc...

C'est extrĂȘmement dĂ©routant de dĂ©velopper un composant et de ne pas le voir s'animer / rĂ©agir aux Ă©vĂšnements lors de son injection dans une page .astro, mais le rĂ©flexe "d'activer le JavaScript" s'acquiĂšre plutĂŽt rapidement ; C'est mĂȘme plutĂŽt une bonne chose de devoir s'interroger sur la dynamisation d'un composant aprĂšs le build de l'application. À l'issue de cette migration, je peux vous dire que la performance est au rendez-vous. Clairement, la phase la plus longue du build repose sur l'optimisation et la compression des images. Avec Astro, le score Google Lighthouse talonne les 100%, de mĂȘme que le respect du SEO, avec des plugins prĂȘts Ă  l'emploi, tel que Partytown pour Google Analytics, ou encore l'ajout du sitemap. En Ă©voquant la performance, je ne peux m'empĂȘcher de penser Ă  ViteJS... En effet, sous le capot d'Astro (boy) 🚀 se cache le bundler de nouvelle gĂ©nĂ©ration, ainsi que son compilateur Rust (SWC) pour les composants React. Que demander de plus !?

Enfin, p'tit expérimentation supplémentaire sur ce travail, l'ajout de Preact Signals, pour les données partagées au sein de l'application. Une fois encore, je lùche des bases solides (Redux / Context API) pour me tourner vers la modernité. Bien qu'Astro préconise Nano Stores comme pattern de State Management, Nate Moore (co-créateur d'Astro) n'a pas hésité à présenter son framework, tout en vantant les mérites (et surtout la simplicité) des Signals, lors de la ViteConf d'Octobre 2022.

Pour rĂ©sumer : J'ai lĂąchĂ© Gatsby pour Astro (2.0) et moteur ViteJS (4.0). J'ai conservĂ© Strapi (toujours aussi merveilleux) en mettant le mettant Ă  niveau, de ce fait, j'ai dĂ» abandonner MongoDB au profit du bon vieux SQL (enfin PSQL 14.0 "per favore" đŸ€Œ). J'ai (re)construit le site Web from scratch avec une architecture Islands, un routage par dossier, React 18 pour les composants dynamiques, Preact Signals pour les donnĂ©es partagĂ©es, TaillwindCSS (3.0) pour l'UI, mais aussi Workbox pour l'aspect PWA. Oh ! J'ai Ă©galement profitĂ© de ce travail de migration pour industrialiser mes webhooks ; adieux Fastify et son architecture MVW (entendez bien ModĂšle-Vue WTF...) et bonjour NestJS (toujours en duo avec Fastify bien sĂ»r). Et voilĂ  ! Ce mois de FĂ©vrier 2023 marque la renaissance d'Orluk Photo !

Sources