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

WebMardi [2023.10.03] - Zero JS Quest. Faire sa...

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Yago Yago
September 27, 2023

WebMardi [2023.10.03] - Zero JS Quest. Faire sans scripts avec JavaScript

Les 10 dernières années ont marqué l’arrivée en force de JavaScript dans tous les domaines. Autrefois réservé à rajouter un peu d’interactivité dans votre site avec jQuery notamment, il s’est imposé comme un langage de choix pour établir tout le socle technique de vos sites internet, applications web et plus encore; avec toutes les dérives qu’on connaît. Après les années folles et naïves marquées par des scripts délivrés aux internautes toujours plus volumineux, nous arrivons désormais dans une période qui s’appuie sur l’expérience et la maturité acquise afin de remettre en question ces modes de développement pour se focaliser sur la quête de performances. Cette quête repose en partie sur l’approche de ne délivrer que le minimum, voir aucun JavaScript à l’internaute.

Explorons ensemble les options disponibles, ainsi que leurs avantages et inconvénients. Cela sera également l’occasion de questionner cette “problématique”. Il n’est pas question de définir si JavaScript est bien ou mal, mais plutôt de déterminer comment l’utiliser au mieux.

YouTube : https://www.youtube.com/watch?v=AAvaCAItaAU&ab_channel=Webmardi

Avatar for Yago

Yago

September 27, 2023
Tweet

More Decks by Yago

Other Decks in Technology

Transcript

  1. 03.10.2023 - WEBMARDI YANN GOUFFON / 58 1 ZERO JS

    QUEST FAIRE SANS SCRIPTS AVEC JAVASCRIPT NODE MODULES DEV JS
  2. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    🎂 15 ans dans le web 📰 Friand de nouveautés 📷 Photographe, randonneur, voyageur et gamer 👪 Mari et père 🐙 github.com/yago 🔗 h tt ps:/ /yago.io 2 Développeur Frontend & JavaScript @ Antistatique Yann Gou ff on
  3. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    3 *J’aime les g ros bundles et je ne peux pas mentir Vous autres devs JS ne pouvez pas le nier Quand un site se char g e avec tout Firebase et une interface Three.js Vous vous sentez pousser des ailes
  4. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    4 Que nous disent les chi ff res ? + 10% (vs 2021)
  5. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    5 Que nous disent les chi ff res ?
  6. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    6 Que nous disent les chi ff res ?
  7. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    7 Que nous disent les chi ff res ?
  8. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    8 Que nous disent les chi ff res ?
  9. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    9 Que nous disent les chi ff res ?
  10. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    10 Que nous disent les chi ff res ? NOUVEAUX FRAMEWORKS C’est votre faute !
  11. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    11 Que nous disent les chi ff res ? Non, c’est ton GTM…
  12. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    🍨 Au commencement il y avait “Vanilla” 13 Si pur…
  13. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    14 <!doctype html> <html lang="fr"> <head> <! -- [...] - </head> <body> <h1>📠 Calculateur 3000</h1> <form id="calculator"> <input type="number" name="a" /> + <input type="number" name="b" /> = <span id="result">0</span> </form> <script type="application/javascript" src="calculator.js" ></script> </body> </html>
  14. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    + Très léger + Pas de Cumulative Layout Shi f (CLS) - Peu de structure - Pas de template engine 16 Vanilla en résumé
  15. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    ⚛ Avance rapide → 2015 React 17 Go React, Go Go !
  16. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    18 import { useState } from 'react'; const App = () => { const [a, setA] = useState(0); const [b, setB] = useState(0); return ( <> <h1>📠 Calculateur 3000</h1> <form> <input type="number" onChange={e => setA(+e.target.value)} /> + <input type="number" onChange={e => setB(+e.target.value)} /> = <span>{a + b}</span> </form> </> ); }; export default App;
  17. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    + Template Engine JSX + Bonne Developer Experience (DX) - Lourd - Cumulative Layout Shi f (CLS) 20 React en résumé
  18. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    ⏭ Next.js entre dans le game 21 Le future, c’est Now !
  19. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    24 import { useState } from 'react'; const Homepage = () => { const [a, setA] = useState(0); const [b, setB] = useState(0); return ( <> <h1>📠 Calculateur 3000</h1> <form> <input type="number" onChange={e => setA(+e.target.value)} /> + <input type="number" onChange={e => setB(+e.target.value)} /> = <span>{a + b}</span> </form> </> ); }; export default Homepage; ~250kB
  20. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    27 import { useState } from 'react'; const Homepage = () => { const [a, setA] = useState(0); const [b, setB] = useState(0); return ( <> <h1>📠 Calculateur 3000</h1> <form> <input type="number" onChange={e => setA(+e.target.value)} /> + <input type="number" onChange={e => setB(+e.target.value)} /> = <span>{a + b}</span> </form> </> ); }; export default Homepage; ~87kB
  21. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    30 "use client" import { useState } from 'react'; const Homepage = () => { const [a, setA] = useState(0); const [b, setB] = useState(0); return ( <> <h1>📠 Calculateur 3000</h1> <form> <input type="number" onChange={e => setA(+e.target.value)} /> + <input type="number" onChange={e => setB(+e.target.value)} /> = <span>{a + b}</span> </form> </> ); }; export default Homepage; ~82kB
  22. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    + Avantages de React + Code Spli tt ing, Incremental Static Regeneration (ISR) + Logique Server Side + Pas de Cumulative Layout Shi f (CLS) + Routeur, gestion des images, etc - Serveur Node.js - Hydration obligatoire 32 Next.js en résumé
  23. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    🙋 C’est quoi l’hydration ? 33 Navigateur Framework Serveur
  24. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    💽 Révision de l’approche avec Remix 38 Je connais les standards
  25. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    40 import { useState } from 'react'; import { Scripts } from "@remix-run/react"; const App = () => { const [a, setA] = useState(0); const [b, setB] = useState(0); return ( <> <h1>📠 Calculateur 3000</h1> <form> <input type="number" onChange={e => setA(+e.target.value)} /> + <input type="number" onChange={e => setB(+e.target.value)} /> = <span>{a + b}</span> </form> <Scripts/> </> ); }; export default App; ~75kB
  26. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    42 import { useActionData } from '@remix-run/react'; export const action = async ({ request }) => { const body = await request.formData(); return { a: body.get('a'), b: body.get('b'), result: +body.get('a') + +body.get('b'), }; }; const App = () => { const data = useActionData(); return ( <> <h1>📠 Calculateur 3000</h1> <form method="post"> <input type="number" name="a" value={data?.a} /> + <input type="number" name="b" value={data?.b} /> = <span id="result">{data?.result ?? 0}</span> <input type="submit" style={{ display: 'none' }} /> </form> </> ); }; export default App;
  27. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    + Avantages de React + Basé sur les Standards du Web + Logique Server Side + Pas de Cumulative Layout Shi f (CLS) + Code Spli tt ing + Hydration optionnelle - Serveur Node.js - Seulement pour des applications 44 Remix en résumé
  28. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    🧑🚀 L’apogée du “statique” avec Astro 45 I believe I can McFly !
  29. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    47 -- - import Calculator from '../components/Calculator'; import '../styles/globals.css'; -- - <!doctype html> <html lang="fr"> <head> <! -- [...] - </head> <body> <h1>📠 Calculateur 3000</h1> <Calculator client:visible /> </body> </html> ~16kB
  30. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    49 -- - import '../styles/globals.css'; -- - <!doctype html> <html lang="fr"> <head> <! -- [...] - </head> <body> <h1>📠 Calculateur 3000</h1> <form x-data="{ a: 0, b: 0 }"> <input type="number" @keyup="a = $event.target.value" /> + <input type="number" @keyup="b = $event.target.value" /> = <span x-text="+a + +b"></span> </form> <script> import Alpine from 'alpinejs'; Alpine.start(); </script> </body> </html> ~17kB
  31. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    + Template engine JSX + Island architecture + Framework agnostic + Code Spli tt ing - Seulement pour des sites de contenu 51 Astro en résumé
  32. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    🧑🏫 Ce qu’il faut retenir 52 JavaScript is the new PHP Marty ! Oh boy…
  33. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    JavaScript est indispensable pour l’interactivité non-standard 53
  34. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    Ne pas considérer les connexions rapides et les CPUs puissants comme acquis 54
  35. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    Définir un budget et choisir prudemment ses dépendances 55
  36. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    Préférer l’hydration optionnelle et l’island architecture 56
  37. YANN GOUFFON 03.10.2023 - WEBMARDI ZERO JS QUEST / 58

    → Cost of JavaScript 2023 → pa tt erns.dev → Web Almanac 2022 - JS 57 Resources