PWA Night vol.18 ~パフォーマンス~ での発表資料です。
Jamstack × PWA ʹ͓͚ΔΩϟογϡઓུʢNuxtϕʔεͷ͓ʣࣲా ف - Wanta, IncPWA Night vol.18 ʙύϑΥʔϚϯεʙ
View Slide
ࣲా ف / Kazuki ShibataΥϯλגࣜձࣾͷڞಉۀऀ$00ɻNJDSP$.4ͷσβΠϯɺϑϩϯτ ։ൃΛ͍ͯ͠·͢ɻ+BNTUBDL/FYU/VYU͕͖ɻ!TIJCF
microCMSͷհ• ຊͷϔουϨεCMS• ίϯςϯπAPIܦ༝Ͱऔಘ• ϚϧνϓϥοτϑΥʔϜʹରԠ• Imgixࡌ• Jamstackͱͷ૬ੑ˕
ຊͷྲྀΕ• Jamstackͱ• JamstackͷΩϟογϡઓུ• Ωϟογϡߏ• NuxtͷϓϦϑΣονػೳ• Nuxt PWA
JamstackͱWhat is the Jamstack
Jamstack• ࣄલϏϧυͨ͠੩తϑΝΠϧΛ৴ʢʴAPIʹΑΔॲཧʣ• SSG + CSRͷϋΠϒϦου• ॳظϖʔδࣄલϏϧυͨ͠੩తϑΝΠϧΛϩʔυ͠ɺϖʔδભҠ࣌CSRΛߦ͏• ϝσΟΞͳͲɺ੩తίϯςϯπͷଟ͍αΠτʹ͍͍ͯΔ
Α͋͘ΔJamstackͷߏ
JamstackͷϝϦοτ• ඞཁͳͷ੩తϑΝΠϧͷϗεςΟϯάͷΈ• NetlifyɺGitHub PagesɺS3ɺVercelͳͲʢݸਓར༻ϨϕϧͳΒແྉʣ• APIίʔϧϏϧυ࣌ͷΈ• APIϦΫΤετͷ੍ݶ͕͋ͬͯ҆৺• ສ͕ҰɺAPI͕མͪͯ҆৺• ηΩϡΞˍϋΠύϑΥʔϚϯεˍ͍҆
JamstackͷσϝϦοτ• ϖʔδ͕ଟ͍ͱϏϧυʹຖճ͕͔͔࣌ؒͬͯ͠·͏• ϓϨϏϡʔͷ࣮͕ͪΐͬͱ໘• εςʔδϯάڥΛͲ͏ͬͯߏங͢Δ͔ɺݟ͕·ͩগͳ͍
JamstackͷΩϟογϡઓུCache Strategy
ΩϟογϡߏCDNΩϟογϡϒϥβ ΩϟογϡωοτϫʔΫ
ΩϟογϡߏCDNΩϟογϡService WorkerCache APIϒϥβ ΩϟογϡωοτϫʔΫϒϥβService WorkerίίʹॲཧΛڬΊΔʢProxyͬΆׂ͍ʣهɿϒϥβΩϟογϡԚછΛͤ͞ͳ͍ͨΊʹϒϥβΩϟογϡΑΓखલʹSW͕͋Δ
Cache APIͱϒϥβΩϟογϡͷҧ͍• Cache APIΛ͏ͱΩϟογϡͷࡉ͔͍ίϯτϩʔϧ͕Ͱ͖Δ• ·ͩΞΫηε͍ͯ͠ͳ͍ϑΝΠϧΩϟογϡͰ͖Δ• ϑΝΠϧ୯ҐͰͷΩϟογϡ੍ޚ͕Ͱ͖Δ• ΦϑϥΠϯͰ͑Δ
NuxtͷϓϦϑΣονػೳ• NuxtʹViewableΤϦΞͷϦϯΫઌΛϓϦϑΣον͢Δػೳ͕ ͍͍ͭͯΔ• Full Static Generation ʹΑΔpayloadϑΝΠϧର• payloadϑΝΠϧɿSPAભҠઌͷσʔλ• ϒϥβΩϟογϡࡁΈͷϑΝΠϧऔಘ͠ʹߦ͔ͳ͍• ମײతʹඇৗʹߴ
DEMOhttps://microcms.io/blog
ϓϦϑΣονɿࣄલʹσʔλΛऔಘCDNΩϟογϡService WorkerCache APIϒϥβ ΩϟογϡωοτϫʔΫϒϥβϝϞϦવɺωοτϫʔΫΛհ͢͜ͱͰϓϦϑΣον͞ΕΔ·Ͱͷ࣌ؒ͘ͳΔ
ϓϦϑΣονɿࣄલʹσʔλΛऔಘCDNΩϟογϡService WorkerCache APIϒϥβ ΩϟογϡωοτϫʔΫϒϥβϝϞϦϓϦϑΣονσʔλग़དྷΔݶΓΩϟογϡ͍ͨ͠
Nuxt PWAProgressive Web App
ϥϯλΠϜΩϟογϡϓϦΩϟογϡ• ϑΣον࣌ʹΩϟογϡ• ΩϟογϡઓུΛࢦఆͰ͖Δ• Service WorkerͷΠϯετʔϧ࣌ʹࣄલʹΩϟογϡ͓ͯ͘͜͠ͱ͕Ͱ͖Δ• ະΞΫηεͷϑΝΠϧΛΩϟογϡͰ͖Δ• ϫΠϧυΧʔυ͑ͳ͍ʢଟʣ
ग़య: https://developers.google.com/web/tools/workbox/modules/workbox-strategiesΩϟογϡઓུɿCache first
ग़య: https://developers.google.com/web/tools/workbox/modules/workbox-strategiesΩϟογϡઓུɿNetwork first
ग़య: https://developers.google.com/web/tools/workbox/modules/workbox-strategiesΩϟογϡઓུɿStale-While-RevalidateόοΫάϥϯυͰ ϑΣον
Nuxt PWA• PWAϞδϡʔϧΛೖΕΔͱɺϏϧυ࣌ʹࣗಈతʹsw.jsΛ࡞ͯ͘͠ΕΔ• ༰nuxt.config.jsͰઃఆͰ͖Δ• Workbox API͕͑Δ• GoogleͷศརϥΠϒϥϦ• σϑΥϧτͰ /_nuxt/ ҎԼ Cache first ͰϥϯλΠϜΩϟογϡ͞ΕΔ• όϯυϧJSྨ• ϓϦϑΣον͞ΕΔ payload.js ྨ• σϑΥϧτͰϓϦΩϟογϡͷઃఆͳ͠ʢv3Ҏ߱ʣ
Nuxt Jamstackʹ͓͚ΔΩϟογϡઓུ• ίϯςϯπHTMLߋ৽ੑ͕ߴ͍ͷͰɺnetworkFirst ͔ staleWhileRevalidate• /_nuxt/ ԼϏϧυͷͨͼʹϋογϡ͕͘ͷͰ cacheFirst Ͱͳ͍• ϓϦΩϟογϡωΠςΟϒΞϓϦͷΠϯετʔϧͱಉ͡ߟ͑ํͰྑͦ͞͏• PWAΞϓϦͷ༰ྔ૿Ճ·͘͠ͳ͍• جຊݻఆΞηοτʢΞΠίϯɺϩΰྨʣͷΈ͕ແ͔ʁ• NuxtϓϦϑΣον͕͋ΔͷͰɺϓϦΩϟογϡͷඞཁੑͦΜͳʹͳͦ͞͏
nuxt.config.js ͷઃఆ• offlineAssets• ϓϦΩϟογϡ• runtimeCaching• ϥϯλΠϜΩϟογϡ• ΫϩεΦϦδϯͳ௨৴ʹରͯ͠networkFirst·ͨstaleWhileRevalidate͔͑͠ͳ͍• ͪΌΜͱCORSઃఆ͕ग़དྷ͍ͯΕ͍͚Δ͔ ʢݕূؒʹ߹Θͣʣ• ࢀߟɿhttps://developers.google.com/web/tools/workbox/guides/handle-third-party-requests
ΞΠίϯྨ3rd partyCDN
·ͱΊSummary
·ͱΊ• Jamstackͷར੩తϑΝΠϧ৴ʴSPAʹΑΔߴύϑΥʔϚϯε• NuxtϓϦϑΣονͰύϑΥʔϚϯε্ ʢϦιʔεͷϩʔυ࣌ؒΛ΄΅ແͤ͘Δʣ• Service WorkerͰΩϟογϡΛޮԽͯ͠͞ΒʹύϑΥʔϚϯε্
Thanks :)!TIJCF