Fast by Default : Near Instant Load Times at Scale with GatsbyJS

A presentation at Human Talk x Software Crafters Lyon in September 2020 in Lyon, France by Matthieu Auger

Slide 1

Slide 1

FAST BY DEFAULT ⚡ Des chargements de page quasi instantanés avec GatsbyJS

Slide 2

Slide 2

Salut 👋 Lyonnais depuis 3 semaines CTO Lyon ♥ JAMstack - 🎨 Daltonien @matthieuauger

Slide 3

Slide 3

LE WEB EST DEVENU BOULIMIQUE

Slide 4

Slide 4

COMMENT EN ESTON ARRIVÉ LÀ ?

Slide 5

Slide 5

AU COMMENCEMENT, ÉTAIT LE STATIQUE 💎 Des chiers HTML purs servis par un serveur 🥇 Première page créée sur le Web fi ⚡ Simple. Léger. Scalable. Rapide

Slide 6

Slide 6

PUIS, LE SERVER RENDERING FÛT ROI 👑 🐘 PHP, Python, Ruby 💻 L’HTML est généré coté serveur 💥 Dynamisme

Slide 7

Slide 7

OL’ MYSPACE

Slide 8

Slide 8

AUJOURD’HUI MARQUE LE RÈGNE DES SINGLE PAGE APPLICATIONS (SPA) ⚙ Angular, React, Vue… 📺 L’HTML est généré coté client 🖱Interactivité

Slide 9

Slide 9

LES SPA ONT PERMIS LA CRÉATION DE TRÈS BONNES APPLICATIONS

Slide 10

Slide 10

MAIS ONT CONSIDÉRABLEMENT RALENTI L’EXPÉRIENCE UTILISATEUR

Slide 11

Slide 11

PEUT-ON RÉCONCILIER L’INTERACTIVITÉ DES SPA D’AUJOURD’HUI AVEC LA PERFORMANCE DES SITES STATIQUES DES ANNÉES 90”?

Slide 12

Slide 12

MEET GATSBYJS 1⃣ Vous codez en React 2⃣ L’application est compilée en HTML (site statique) au moment du build

Slide 13

Slide 13

REQUEST FLOW Can I have the homepage please? yeah, take this HTML le, a snapshot of the page I made during the build sweet! i can see the content rst… fi fi React environment is loaded client-side and now click around! Following navigation is managed by React

Slide 14

Slide 14

EST-CE QUE GATSBY TIENT SES PROMESSES ?

Slide 15

Slide 15

Slide 16

Slide 16

NOUS AVONS VOULUS RÉUNIR LA COMMUNAUTÉ JAMSTACK À PARIS

Slide 17

Slide 17

9 MEETUPS ONT EU LIEU, 500 MEMBRES NOUS ONT REJOINT

Slide 18

Slide 18

NOUS VOULIONS UN SITE RAPIDE POUR COMMUNIQUER

Slide 19

Slide 19

NOS BESOINS 📅 A cher les meetups depuis l’API meetup.com 📸 Gallerie de photos ffi ⚡ Performant

Slide 20

Slide 20

📅 AFFICHER LES MEETUPS DEPUIS L’API DE MEETUP.COM

Slide 21

Slide 21

FLOW DE DONNÉES D’UN SITE GATSBY 1⃣ Récupérer la donnée depuis une source 2⃣ Requêter la donnée avec GraphQL 3⃣ Injecter la donnée aux composants React

Slide 22

Slide 22

1⃣ RÉCUPERER LA DONNÉE DEPUIS UNE SOURCE AVEC LES SOURCE PLUGINS

Slide 23

Slide 23

LES SOURCE PLUGINS SONT DES PACKAGES NPM gatsby-con g.js fi module.exports = ({ … plugins: [ { resolve: gatsby-source-meetup, options: { key: process.env.MEETUP_API_KEY, groupUrlName: JAMstack-paris, status: “upcoming,past”, desc: “true”, page: 10 } } ] });

Slide 24

Slide 24

LA DONNÉE EST RÉCUPÉRÉE ET MAPPÉE AU MOMENT DU BUILD RÉCUPÈRE LA DONNÉE SUR L’API MEETUP

Slide 25

Slide 25

2⃣ REQUÊTER LA DONNÉE AVEC GRAPHQL 📢 Language de requête 💙 Créé par Facebook 🥢 Requête seulement ce dont vous avez besoin

Slide 26

Slide 26

Slide 27

Slide 27

LA DONNÉE PEUT ÊTRE REQUÊTÉE DANS LE CODE Homepage.js const data = useStaticQuery( graphqlquery { meetupGroup { events { id name description local_date venue { name address_1 city } link status } name } } );

Slide 28

Slide 28

3⃣ INJECTER LA DONNÉE AUX COMPOSANTS REACT Homepage.js return ( <Layout> {data.meetupGroup.events.map(pastMeetup => { return <Meetup meetupInfo={pastMeetup} /> })} </Layout> )

Slide 29

Slide 29

AJOUTER UN PEU DE CSS 🎨 … LANCER UN BUILD ⚙

Slide 30

Slide 30

JAMSTACK.PARIS 1.0 🎉

Slide 31

Slide 31

☑ CHECKLIST POUR TRAVAILLER AVEC DE LA DONNÉE 1⃣ Chercher, installer et con gurer le plugin source ⚙ 2⃣ Forger sa requête GraphQL avec GraphiQL 🕵 fi 3⃣ Injecter la donnée à vos composants React 💉

Slide 32

Slide 32

⚡ PERFORMANCE

Slide 33

Slide 33

📸 TRANSITION FLUIDE

Slide 34

Slide 34

GATSBY DÉCOUPE VOTRE CODE PAR PAGE Homepage JS Gallery JS GATSBY-IMAGE N’EST CHARGÉE QUE SUR LA PAGE GALLERY

Slide 35

Slide 35

LES SOUS-PAGES SONT CHARGÉES AU SURVOL DES LIENS

Slide 36

Slide 36

AUTRES OPTIMISATIONS 🖱Native Lazy Loading 🎨 Inline Critical CSS 2⃣ HTTP2

Slide 37

Slide 37

GATSBY TIENT SES PROMESSES

Slide 38

Slide 38

LES LIMITES DE GATSBY

Slide 39

Slide 39

LE TEMPS DE BUILD EST CORRELÉ À LA TAILLE DU CONTENU “builds are slow (about 1.5-2 times slower than my PC) and […] 15 minutes is sometimes easy to reach” Source: https://oioannou.com/build-on-circleci-deploy-netlify

Slide 40

Slide 40

LES ERREURS PEUVENT ÊTRE MYSTÉRIEUSES

Slide 41

Slide 41

EN RÉSUMÉ 😍 Super bonne expérience 📓 Très bonne documentation 👫 La community est positive et aidante ❤ L’approche hybride dynamique et statique 🏰 Toujours en recherche d’un projet professionnel pour lequel utiliser Gatsby

Slide 42

Slide 42

SI VOUS VOULEZ DÉCOUVRIR GATSBY 📒 https://www.gatsbyjs.org/docs/ 📹 https://egghead.io/browse/frameworks/gatsby https://github.com/gatsbyjs/gatsby

Slide 43

Slide 43

MERCI