Aller au contenu principal

Veille - Oct-Nov 2023

· 5 minutes de lecture
Cyril Hue
Front End Engineer

Aujourd'hui je vous fais un petit recap de ma veille des derniers mois.

Je vais principalement vous partager des articles en rapport de près ou de loin avec le front.

On va commencer par les 3 annonces les plus importantes:

  • Angular 17
  • ViteJs 5
  • Typescript 5

Angular 17

Angular 17 est sorti il y a quelques jours, et il apporte son lot de nouveautés.

On notera tout d'abord en plus du nouveau logo, un relooking complet de la doc, avec plus d'interactivité pour l'apprentissage (usage desWebContainers) https://angular.dev

Ensuite un point important est le changement du control flow intégré d'angular. Ce qu'on avait l'habitude de faire avec *ngIf, *ngSwitch, and *ngFor est maintenant remplacé par une nouvelle syntaxe.

On notera principalement un gain significatif sur le type-narrowing, et une rapidité de rendu amélioré.

Le trackBy était souvent absent dans les boucles *ngFor cela pouvait mener à des problèmes de performance. Il est maintenant obligatoire dans cette nouvelle syntaxe.

Une commande de migration est disponible pour migrer votre code vers la nouvelle syntaxe. Aussi les équipes travail avec Jetbrains et Prettier pour supporter la nouvelle syntaxe au mieux.

If statement

<div *ngIf="loggedIn; else anonymousUser">
  The user is logged in
</div>
<ng-template #anonymousUser>
  The user is not logged in
</ng-template>

Devient:

@if (loggedIn) {
  The user is logged in
} @else {
  The user is not logged in
}

Switch statement

<div [ngSwitch]="accessLevel">
  <admin-dashboard *ngSwitchCase="admin"/>
  <moderator-dashboard *ngSwitchCase="moderator"/>
  <user-dashboard *ngSwitchDefault/>
</div>

Devient:

@switch (accessLevel) {
  @case ('admin') { <admin-dashboard/> }
  @case ('moderator') { <moderator-dashboard/> }
  @default { <user-dashboard/> }
}

For loop

On notera que le trackBy est obligatoire dans cette nouvelle syntaxe ainsi que la présence d'un shortcut optionel @empty pour gérer le cas d'une liste vide.



```html
@for (user of users; track user.id) {
  {{ user.name }}
} @empty {
  Empty list of users
}

Performance

Toutes ces nouveautés apportent un gain de performance significatif, on notera:

  • 90% plus rapide au runtime
  • 87% plus rapide au build pour l'hybrid rendering
  • 67% plus rapide au build pour le client rendering

Deferrable views

Angular 17 apporte aussi le concept de deferrable views qui permet de définir des vues qui ne seront pas rendu au premier rendu de la page, mais seulement quand l'utilisateur en a besoin. La syntaxe est assez simple et s'inspire de la nouvelle syntaxe de *ngIf.

@defer (on viewport) {
  <comment-list/>
} @loading {
  Loading…
} @error {
  Loading failed :(
} @placeholder {
  <img src="comments-placeholder.png">
}

Il existe d'autre trigger comme on idle, on immediate je vous laisse regarder la doc pour plus d'info ici https://angular.io/guide/defer

Le reste

  • l'hydration sort de la preview
  • nouveau package @angular/ssr
  • deploiement simplifié avec le cloud (firebase)
  • nouveau hooks de cycle de vie afterRender et afterNextRender
  • debug des injections de dépendances dans les devtools https://angular.io/guide/devtools
  • Signal passe en developper preview
  • View transition API en experimental
  • Vite et esbuild est maintenant le defaut pour les nouveaux projets

Vous retrouverez toutes les infos ici dans l'article sur le blog d'Angular ici : https://blog.angular.io/introducing-angular-v17

Vite 5.0

L'autre grosse annonce c'est la sortie de Vite 5.0, qui apporte son lot de nouveautés. D'ailleurs il nous tease la sortie prochaine de Vitest 1.0 roadmap vitest, ou encore l'open source de Rolldown qui approche pour la fin d'année. Vite 5 utilise désormais Rollup 4 ce qui apporte un gain de performance significatif pour le build. Il y a eut un travail fait sur le clean up des API (retrait des API deprecated). Il y a aussi Node.js 18 et 20+ qui sont désormais requis suite à la EOL de node 16.

Ici le lien vers l'annonce officielle: https://vitejs.dev/blog/announcing-vite5 Et voici le lien vers le changelog: Chagelog

Typescript 5.3 Realease Candidate

Plusieurs nouveautés je ne prendrais ici le temps d'en cité que quelques unes. L'import attributes est mis à jour et on peut utiliser le mots clés with. Le Switch (true) narrowing est maintenant disponible. Le Jump to definition est maintenant disponible lors du clic sur les Hints. Il y a aussi de l'optimisation sur les performances en skipant le parsing de la JSDoc.

Il y à encore plein d'autre changement, je vous laisse le lien vers l'annonce officielle: Typescript 5.3 Release Candidate

Un peu de lecture

Pour terminer cette article déja bien long, je vous partage quelques articles que j'ai trouvé intéressant ces derniers mois.

  • Server-Side Rendering (SSR) with Bun and React SSR - Bun + React
  • GitHub - coryhouse/a11y: Repository on accessibility a11y
  • A (more) Modern CSS Reset - Andy Bell CSS Reset
  • React Server Components React Server Components
  • Creating Custom QR Codes - Holly Cummins QR Codes
  • Empty States Empty States
  • Le secret caché des Regex en JavaScript qui rend fou ! - Blog - Code-Garage Regex
  • Storybook 7.5 Storybook 7.5
  • Only use GET and POST | Epic Web Dev by Kent C. Dodds GET and POST
  • GitHub - docusealco/docuseal: Open source DocuSign alternative. Create, fill, and sign digital documents ✍️ Docuseal
  • Quand les langues fictives deviennent mécaniques de jeu – Canard PC Langues fictives
  • 🎉 Introducing UnoCSS Preset Fluid: The Next Step in Responsive Web Design | by Renato | Nov, 2023 | Medium UnoCss Fluid
  • GB BASIC | Tony Wang GB Basic

Popover API

· 3 minutes de lecture
Cyril Hue
Front End Engineer

Popover avant

Vous avez surement déjà vu des popovers sur des sites web. Ce sont des petites fenêtres qui s'affichent au survol d'un élément. On les retrouve souvent au survol d'un bouton d'action pour expliquer ce que fait ce bouton.

Si vous avez déjà essayé de faire un popover, vous avez surement galéré à le positionner correctement. Il faut prendre en compte la taille de la fenêtre, la position de l'élément, la taille de l'élément, la taille du popover, etc. En général, on utilise des librairies pour faire ça, mais saviez vous qu'il existe une API native pour faire des popovers ?

Docusaurus 🖤 GitHub pages

· 5 minutes de lecture
Cyril Hue
Front End Engineer

Disclaimer : L'idée de cette article vient de mon ami Clainchoupi qui a fait un article sur le même sujet. Je vous invite à aller le lire, il est très bien écrit et très complet et ça se passe ici : Clainchoupi - Docusaurus 🖤 GitHub pages.

Tout comme lui je vais vous expliquer comment j'ai mis en place mon blog avec Docusaurus et GitHub pages. À l'instar de Clainchoupi, j'utilise pnpm pour gérer mes dépendances.

Spoiler : Je vous propose à la fin un template qui gére le cache de pnpm et qui déploie votre site sur GitHub pages.

La mode du faux gras

· 8 minutes de lecture
Cyril Hue
Front End Engineer

Disclaimer : Je ne suis pas un expert en accessibilité. Je ne fais qu'exposer des faits qui nécessiteraient plus de moyens pour être vérifiés.

Je vais vous raconter une histoire,

J'étais sur linkedin l'autre jour et j'ai partagé un post d'une collègue pour lui donner un peu de visibilité sans faire attention au post en lui-même. J'aime ma boite donc je suis un peu corporate c'est normal. À peine 5 minutes après un ami me contacte et me dit :

Hello Mister! J'ai envie de troller : Tu partages un post corporate avec du texte non accessible alors que dans ton calendrier de l'avent ce sujet te tenait à coeur ?

Les Saas aux services des projets persos

· 6 minutes de lecture
Cyril Hue
Front End Engineer

Je passe beaucoup de temps à faire des prototypes de projets, j'ai le fameux syndrôme du projet perso, je ne compte même plus le nombre de repos que j'ai sur Github ou Gitlab. Très peu d'entre eux sont terminés, mais c'est le but en fait d'un projet perso.

Quelques projets ont la chance d'être déployés et une infime partie ont même la chance d'avoir des utilisateurs !

En revanche aucun projet n'est monétisé, pourtant j'utilise des serveurs, de l'hébergement, des bases de données, etc : comment je fais ?

Bien commencer dans l'écosysteme React

· 6 minutes de lecture
Cyril Hue
Front End Engineer

Ecmascript avant React

Je vois souvent des devs partir bille en tête sur React pensant peut-être que cela suffit mais il n'en est rien. Il ne faut pas oublier que l'apprentissage c'est comme un escalier.

jeune enfant passant de la première marche à la cinquiéme marche, sur chaque marche il y à écrit dans l&#39;ordre HTML / CSS / Javascript / Git / Github / React

Pour travailler efficacement sur un projet dans l'écosysteme ReactJs ou ReactNative, il est primordial de maitriser des concepts de base du javascript modern.

Je vais vous en lister deux qui, pour moi, sont indispensables avant de se lancer dans du developpement React.