La stack de ce site

J’ai hésité assez longtemps pour décider du meilleur outil pour publier ce site internet ; il me fallait à la fois un moteur de blog qui mette l’accent sur la performance et qui soit suffisamment évolutif pour pouvoir me permettre de rajouter facilement du contenu personnalisé et éditer la mise en page.

Mes besoins

Mes attentes lors de la création de ce blog était de pouvoir disposer d'un site me permettant à la fois de publier des brèves au quotidien (type Shaarli, des articles de longueur plus conséquentes et de mettre en ligne mes carnets qui me servent principalement à garder une trace de sujet plus ou moins techniques dans lesquels je me suis plongé.

Le point commun de ces modes de publication devait être d'avoir un site qui mette l'accent sur l’accessibilité des utilisateurs à travers 3 axes :

  1. le suivi des bonnes pratiques de l'accessibilité du web
  2. des performances les plus élevées possible, en limitant au maximum le poids des éléments chargés sur chaque pages
  3. pas de nécessité d'avoir javascript activé pour consulter le site

Benchmark en 5 minutes

Après un rapide tour des moteurs de blog disponible je me suis arrêté à la liste (non-exhaustive) suivante :

Wordpress (PHP, MySQL)

Ghost (NodeJS, MySQL)

Hugo (Markdown)

J'ai déjà eu à utiliser et à migrer des sites Wordpress par le passé et mes souvenirs en restent douloureux. L'utilisation basique d'un site Wordpress est à porter du quidam moyen, mais la création d'un thème et de manière plus générale la customisation reste un calvaire si l'on veut faire ça de manière propre en assurant la compatibilité et maintenance avec les mises à jour futures.

J'ai essayé Ghost pendant quelques jours et bien que le code applicatif soit beaucoup plus claire et organisé que celui de Wordpress, je suis arrivé à la conclusion que ce type d'outils offrait trop de possibilités et de complexité par rapport à mes besoins.

Hugo me paraissait très attractif sur la partie performance et simplicité, mais la création d'un article passait nécessairement par le fait d'avoir un terminal sous la main (ou coupler le tout à un process de continuous deployment et à un repository sur github / gitlab / bitbucket). Cependant, quitte à suivre cette voie, il me paraissait plus facile de produire mon propre moteur de blog de manière à n'avoir à disposition que des fonctionnalités nécessaire à mes besoins.

Créer un moteur personnalisé ?

Ayant devant moi quelques jours d'intercontrat j'ai décidé que, en plus de me permettre de remettre les mains dans le cambouis des technologies web, développer ma propre solution répondrait à la totalité de mes besoins tout en me permettant d'avoir une vision complète sur mon outil.

Je me suis donc lancé dans le développement d'une solution en partant sur les technologies suivantes :

Première itération

Il m'a fallu un peu plus de 4 jours pour obtenir un résultat satisfaisant. Tout n'était pas parfait (pas de support multi-utilisateur, pas de statistiques de consultation, pas de fonction de recherche) mais les fonctionnalités dont j'avais besoin étaient là, notamment:

Le code source de cette version faisait moins 100Ko et aurait demandé peu de travail avant d'être publiable sur Github.

Limitations et seconde itération

Après quelques semaines d'utilisation et la publication de plusieurs carnets il m'est vite apparu que si les différentes pages du site étaient relativement légère, le temps de réponse du serveur pour certaines d'entre elles était assez élevé (dû au temps de transformation du markdown en html à la volée) ; allant parfois jusqu'à près d'une demi-seconde.

En outre, certaines pages d'article ou de carnet nécessitant l'utilisation de highlight.js et Katex, les styles CSS permettant d'utiliser ces éléments étaient chargés sur toutes les pages de cette catégorie.

Suite à ces considérations J'ai donc décidé d'effectuer une seconde itération en repartant de zéro concernant la partie code du site avec la logique suivante : les différentes pages et articles sont intégralements écrit en markdown et leur contenu injecté dans des templates html via une étape de build.

Les avantage principaux d'avoir une étape de build sont les suivants :

Le seul inconvénient que je vois aujourd'hui est le fait que tout comme Hugo l'ajout de nouveaux articles ou brèves n'est pas instantané mais demande de manuellement ajouter un fichier markdown et de refaire un build du site avant de le redéployer. J'utilise pour le moment Github actions pour effectuer ces étapes lors de la mise à jour du repository du site.