Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Next.js à la rescousse de mon frontend !

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Next.js à la rescousse de mon frontend !

Comment moderniser un frontend PHP/jQuery vers Next.js

Avatar for Nordwin HOFF

Nordwin HOFF

November 02, 2021
Tweet

Other Decks in Programming

Transcript

  1. 15

  2. Analytics/Tracking SEO Internationalisation (i18n) Webperf Web Core Vitals Accessibilité (a11y)

    UX Design system Atomic Design Live reload Time To Market GTM Compatible Code base existante (React) 17
  3. Analytics/Tracking SEO Internationalisation (i18n) Webperf Web Core Vitals Accessibilité (a11y)

    UX Design system Atomic Design Live reload Time To Market GTM Compatible Code base existante (React) 18
  4. Analytics/Tracking SEO Internationalisation (i18n) Webperf Web Core Vitals Accessibilité (a11y)

    UX Design system Atomic Design Live reload Time To Market GTM Compatible Code base existante (React) 19
  5. Analytics/Tracking SEO Internationalisation (i18n) Webperf Web Core Vitals Accessibilité (a11y)

    UX Design system Atomic Design Live reload Time To Market GTM Compatible Code base existante (React) 20
  6. Analytics/Tracking SEO Internationalisation (i18n) Webperf Web Core Vitals Accessibilité (a11y)

    UX Design system Atomic Design Live reload Time To Market GTM Compatible Code base existante (React) 21
  7. Analytics/Tracking SEO Internationalisation (i18n) Webperf Web Core Vitals Accessibilité (a11y)

    UX Design system Atomic Design Live reload Time To Market GTM Compatible Code base existante (React) 22
  8. 23

  9. npm install + npm run dev - Setup Webpack 5

    - React + Typescript - Fast refresh + hot module replacement - ESlint nextjs + core web vitals 26
  10. npm run build + npm start - SSR / SSG

    / ISR - SPA - Routing (+ internationalization) - Code splitting / Lazy-loading - Prefetching - Image optimization - Polyfills - AMP 27
  11. 40

  12. - Lib tiers compatible SSR - Attention à l’utilisation de

    “window” ou “document” Pas d’appels bloquants Blocking calls) 41
  13. - Composant intégrés: <Img/>, Link />, Script />, Head />...

    - Examples: https://github.com/vercel/next.js/tree/canary/ examples 42
  14. 47

  15. 48

  16. 49

  17. (Static Site Generation / Incremental Static Regeneration) - Rapidité d'exécution

    - Pour des pages edito/contributives - Générées au build - Temps de build augmentés - Pas de personnalisation par utilisateur Au build 51
  18. Server Side Rendering - Optimisation SEO - Pas de layout

    shift - First Interaction Delay (FID  élevé - Charge CPU côté serveur - Cache HTTP compliqué - Aucune possibilité UX à l’affichage Coté serveur 53
  19. Client Side Rendering - Cache HTTP simple - Serveur très

    peu sollicité - Possibilité UX de gestion d’affichage - Layout shift dépend de l’implémentation - SEO lent Coté client 54
  20. Arborescence dossier “pages” pages/ |___ index.tsx |___ error.tsx |___ classifieds

    |___ [id].tsx Plan du site pages pages/error pages/classifieds pages/classifieds/2421 58
  21. Chargement initial SSR Puis navigation SPA Link /> router.push() Détection

    de la locale navigateur Forçage de la locale via un prefix (ex: https://gensdeconfiance/fr ⇒ locale fr) Mapping (prefix;locale) configurable 59
  22. Chargement initial SSR Puis navigation SPA Link /> router.push() Détection

    de la locale navigateur Forçage de la locale via un prefix (ex: https://gensdeconfiance/fr ⇒ locale fr) Mapping (prefix;locale) configurable 60
  23. Chargement initial SSR Puis navigation SPA Link /> router.push() Détection

    de la locale navigateur Forçage de la locale via un prefix (ex: https://gensdeconfiance/fr ⇒ locale fr) Mapping (prefix;locale) configurable 61
  24. Chargement initial SSR Puis navigation SPA Link /> router.push() Détection

    de la locale navigateur Forçage de la locale via un prefix (ex: https://gensdeconfiance.com/fr ⇒ locale fr) Mapping (prefix;locale) configurable 62
  25. Coté serveur pour avoir un effet immédiat Possible côté client

    uniquement après le premier render Fonctionne en SPA getServerSideProps exécuté à chaque changement de route Sans logique custom, Next.js “Redirects” 65
  26. Coté serveur pour avoir un effet immédiat Possible côté client

    uniquement après le premier render Fonctionne en SPA getServerSideProps exécuté à chaque changement de route Sans logique custom, Next.js “Redirects” 66
  27. Coté serveur pour avoir un effet immédiat Possible côté client

    uniquement après le premier render Fonctionne en SPA getServerSideProps exécuté à chaque changement de route Sans logique custom, Next.js “Redirects” 67
  28. Coté serveur pour avoir un effet immédiat Possible côté client

    uniquement après le premier render Fonctionne en SPA getServerSideProps exécuté à chaque changement de route Sans logique custom, Next.js “Redirects” 68
  29. Coté serveur pour avoir un effet immédiat Possible côté client

    uniquement après le premier render Fonctionne en SPA getServerSideProps exécuté à chaque changement de route Sans logique custom, Next.js “Redirects” 69
  30. Attention Lazy loading des traductions par page Traduction coté serveur

    également (get[ServerSide|Statics]Props) Compatible SSG/SSR 72
  31. Traduction d’URL Ne faites pas ça Utilisez votre infra Reverse

    proxy “interne” Next.js “Rewrites” 73
  32. 76

  33. 79

  34. Comment je gère l’authentification ? La preuve est contenue dans

    le session cookie Comment je gère l’analytics ? 2 données d’identification à partager Comment avoir des données cohérentes entre le monolithe et Next.js ? 82
  35. Comment je gère l’authentification ? La preuve est contenue dans

    le session cookie Comment je gère l’analytics ? 2 données d’identification à partager Comment avoir des données cohérentes entre le monolithe et Next.js ? 83
  36. Comment je gère l’authentification ? La preuve est contenue dans

    le session cookie Comment je gère l’analytics ? 2 données d’identification à partager Comment avoir des données cohérentes entre le monolithe et Next.js ? 84
  37. Browser Page + API 1 2 3 4 1/ Login

    2/ Envoi session cookie 3/ Propagation du cookie 4/ Utilisation pour les calls API 86
  38. 1/ Init si absent 2/ Envoi du cookie 3/ Propagation

    du cookie 4/ Ajout en header de call API Si la première page est dans le monolithe Browser Page + API 1 2 3 4 87
  39. Si la première page est dans Next.js 1/ Init si

    absent 2/ Envoi du cookie 3/ Propagation du cookie Browser Page + API 1 2 3 88
  40. Call API côté serveur sur chaque page Factorisation de code

    risquée Un getServerSideProps unique désactive le SSG définitivement High order function redondante si on veut le SSG Next.js ne distingue pas le mode de navigation pas de cache possible (via context ou autre) en mode SPA pas de cache sur les “page props” (shallow routing possible) Cache applicatif Node.js compliqué (et non souhaitable) 90
  41. Call API côté serveur sur chaque page Factorisation de code

    risquée Un getServerSideProps unique désactive le SSG définitivement High order function redondante si on veut le SSG Next.js ne distingue pas le mode de navigation pas de cache possible (via context ou autre) en mode SPA pas de cache sur les “page props” (shallow routing possible) Cache applicatif Node.js compliqué (et non souhaitable) 91
  42. Call API côté serveur sur chaque page Factorisation de code

    risquée Un getServerSideProps unique désactive le SSG définitivement High order function redondante si on veut le SSG Next.js ne distingue pas le mode de navigation pas de cache possible (via context ou autre) en mode SPA pas de cache sur les “page props” (shallow routing possible) Cache applicatif Node.js compliqué (et non souhaitable) 92
  43. Call API côté serveur sur chaque page Factorisation de code

    risquée Un getServerSideProps unique désactive le SSG définitivement High order function redondante si on veut le SSG Next.js ne distingue pas le mode de navigation pas de cache possible (via context ou autre) en mode SPA pas de cache sur les “page props” (shallow routing possible) Cache applicatif Node.js non souhaitable 93
  44. 94

  45. 95

  46. 96

  47. Continuer la migration next/image next/link Intégration dans le DS /

    Storybook Next auth Serverless Multi frontend Vercel 108