ç§ãã¡ã¯é·ãéããã©ãŠã¶ãCSSãããã³ã¢ã¯ã»ã·ããªãã£ã®ãããã¯ãç¡èŠããŠããŸãããã仿¥ã®æŠèŠè³æïŒãªãªãžãã«-2020幎2æïŒã®ç¿»èš³ã§ããã«æ»ãããšã«ããŸãããããã§è¿°ã¹ããµãŒããŒã¬ã³ããªã³ã°ãã¯ãããžãŒã«ã€ããŠã®ããªãã®æèŠãšãHTTP / 2ã«é¢ããæ¬æ Œçãªæ¬ã®å¿ èŠæ§ãã©ãã»ã©ç·æ¥ã§ãããã«ã€ããŠãç§ã¯ç¹ã«èå³ããããŸã-ãããããã¹ãŠãé çªã«è©±ããŸãããã
ãã®æçš¿ã§ã¯ãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã®èªã¿èŸŒã¿ãé«éåãã䜿ãããããåäžãããããã®ããã€ãã®ææ³ã«ã€ããŠèª¬æããŸãã
ããã³ããšã³ãã®äžè¬çãªã¢ãŒããã¯ãã£ãèŠãŠã¿ãŸããããéèŠãªè³ç£ãæåã«èªã¿èŸŒãŸããããã«ãããããã®è³ç£ããã§ã«ãã£ãã·ã¥ã«æ ŒçŽãããå¯èœæ§ãæå€§åããã«ã¯ã©ãããã°ããã§ããïŒ
ããã¯ãšã³ãããªãœãŒã¹ãã©ã®ããã«æäŸããããããŒãžãã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã®åœ¢åŒã«ããå¿ èŠããããã©ããããŸãã¯ã¢ããªã±ãŒã·ã§ã³ã®ã¬ã³ããªã³ã°æéãæé©åããæ¹æ³ã«ã€ããŠã¯è©³ãã説æããŸããã
æŠèŠæŠèŠ
ã¢ããªã®ããŠã³ããŒãããã»ã¹ã3ã€ã®å¥ã ã®ã¹ãããã«åããŠã¿ãŸãããã
- äžæ¬¡ã¬ã³ããªã³ã°-ãŠãŒã¶ãŒãäœããèŠããŸã§ã«ã©ã®ãããæéãããããŸããïŒ
- ã¢ããªã®ããŠã³ããŒã-ãŠãŒã¶ãŒãã¢ããªãèŠããŸã§ã«ã©ã®ãããæéãããããŸããïŒ
- â ?
äžæ¬¡ã¬ã³ããªã³ã°ïŒã¬ã³ããªã³ã°ïŒã®æ®µéãŸã§ããŠãŒã¶ãŒã¯äœãèŠãããšãã§ããŸãããããŒãžãã¬ã³ããªã³ã°ããã«ã¯ãå°ãªããšãHTMLããã¥ã¡ã³ããå¿ èŠã§ãããã»ãšãã©ã®å ŽåãCSSãã¡ã€ã«ãJavaScriptãã¡ã€ã«ãªã©ã®è¿œå ã®ãªãœãŒã¹ãããŒãããå¿ èŠããããŸããå©çšå¯èœãªå Žåããã©ãŠã¶ã¯ç»é¢ãžã®ã¬ã³ããªã³ã°ãéå§ã§ããŸãã
ãã®æçš¿ã§ã¯ãWebPageTestãŠã©ãŒã¿ãŒãã©ãŒã«å³ã䜿çšããŸãããµã€ããžã®ãªã¯ãšã¹ãã®ã«ã¹ã±ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
ä»ã®ãã¡ã€ã«ã®ã»ãããHTMLããã¥ã¡ã³ããšäžç·ã«ããŒããããããŒãžã¯ãã¹ãŠã¡ã¢ãªã«æ ŒçŽãããåŸã«ã¬ã³ããªã³ã°ãããŸããCSSãã¡ã€ã«ã¯äžŠè¡ããŠããŒãããããããåŸç¶ã®åèŠæ±ã«ãã£ãŠé å»¶ãå€§å¹ ã«å¢å ããããšã¯ãªãããšã«æ³šæããŠãã ããã
ã¬ã³ããªã³ã°ãããã¯ãªã¯ãšã¹ãã®æ°ãæžãã
ã¹ã¿ã€ã«ã·ãŒããšïŒããã©ã«ãã§ïŒã¹ã¯ãªããèŠçŽ ã§ã¯ããã®äžã®ã³ã³ãã³ãã衚瀺ã§ããŸããã
ãããä¿®æ£ããæ¹æ³ã¯ããã€ããããŸãã
- ã¿ã°ã®äžçªäžã«ã¹ã¯ãªããã¿ã°ãé
眮ããŸã
body - ã䜿çšããŠã¹ã¯ãªãããéåæã§ããŒããã
async - åæçã«ããŒãããå Žåã¯ãJSãŸãã¯CSSã®å°çãã€ã³ã©ã€ã³ã§èšè¿°ããŸã
ããããã³ã°ã¯ãšãªãã§ãŒã³ã®ã¬ã³ããªã³ã°ãåé¿ãã
ãµã€ãã®é床ãäœäžãããå¯èœæ§ãããã®ã¯ãã¬ã³ããªã³ã°ããããã¯ãããªã¯ãšã¹ãã®æ°ã ãã§ã¯ãããŸãããããã«éèŠãªã®ã¯ãããŠã³ããŒãããå¿ èŠã®ããåãªãœãŒã¹ã®ãµã€ãºãšããªãœãŒã¹ãããŠã³ããŒãããå¿ èŠãããããšããã©ãŠã¶ãŒãæ£ç¢ºã«æ€åºãããšãã§ãã
å¥ã®ãªã¯ãšã¹ããå®äºããåŸã§ã®ã¿ãã¡ã€ã«ãããŠã³ããŒãããå¿ èŠãããããšã«ãã©ãŠã¶ãæ°ä»ããå Žåãåæãªã¯ãšã¹ãã®ãã§ãŒã³ãçºçããå¯èœæ§ããããŸããããã¯ããã€ãã®çç±ã§çºçããå¯èœæ§ããããŸãã
@importCSSã«ã«ãŒã«ããã- CSSãã¡ã€ã«ã§åç §ãããŠããWebãã©ã³ãã®äœ¿çš
- JavaScriptã€ã³ãžã§ã¯ã·ã§ã³ãªã³ã¯ãŸãã¯ã¹ã¯ãªããã¿ã°
ãã®äŸãèããŠã¿ãŸãããããã®
ãµã€ãã®CSSãã¡ã€ã«ã®1ã€ã«ã
@importGoogleãã©ã³ããããŒãããããã®ã«ãŒã«ãå«ãŸããŠããŸãããããã£ãŠããã©ãŠã¶ã¯æ¬¡ã®èŠæ±ã1ã€ãã€ãã®é åºã§å®è¡ããå¿
èŠããããŸãã
- ããã¥ã¡ã³ãHTML
- ã¢ããªã±ãŒã·ã§ã³CSS
- Google Fonts CSS
- Google Font Woffãã¡ã€ã«ïŒã«ã¹ã±ãŒãã«ã¯è¡šç€ºãããŠããŸããïŒ
ãããä¿®æ£ããã«ã¯ãæåã«Google FontsCSSã®ãªã¯ãšã¹ãããã
@importHTMLããã¥ã¡ã³ãã®linkã¿ã°ã«ç§»åããŸããããã«ããããã§ãŒã³ã1ãªã³ã¯çããªããŸãã
ããã«é«éåããã«ã¯ãGoogle FontsCSSãã¡ã€ã«ãHTMLãŸãã¯CSSãã¡ã€ã«ã«çŽæ¥åã蟌ã¿ãŸãã
ïŒGoogle Fontsããã®CSSå¿çã¯ããŠãŒã¶ãŒãšãŒãžã§ã³ãã«ãã£ãŠç°ãªãããšã«æ³šæããŠãã ãããIE8ã䜿çšããŠãªã¯ãšã¹ããè¡ããšãCSSã¯EOTãã¡ã€ã«ïŒOpenTypeã«åã蟌ãŸããŠããïŒãåç §ããIE11ã¯woffãã¡ã€ã«ãåãåããææ°ã®ãã©ãŠã¶ãŒã¯woff2ãåãåããŸãããã ããåé¡ããªããã°ã·ã¹ãã ãã©ã³ãã䜿çšããæ¯èŒçå€ããã©ãŠã¶ãšåãããã«æ©èœããCSSãã¡ã€ã«ã®å 容ãã³ããŒããŠè²Œãä»ããã ãã§ããïŒ
ããŒãžãã¬ã³ããªã³ã°ãéå§ããåŸã§ãããã©ã³ããå®å šã«èªã¿èŸŒãŸãããŸã§ããã¹ãã衚瀺ãããªãããããŠãŒã¶ãŒã¯ããŒãžã䜿çšããŠäœãã§ããªãå ŽåããããŸããããã¯ãçŸåšGoogleFontsã®ããã©ã«ãã§ããfont-displayswapããããã£ã䜿çšããããšã§åé¿ã§ããŸãã
ãªã¯ãšã¹ãã®ãã§ãŒã³ãå®å šã«åãé€ãããšãã§ããªãå ŽåããããŸãããã®ãããªå Žåã¯ã
preloadãŸãã¯ã¿ã°ã䜿çšããŠã¿ãŠãã ããpreconnectãããšãã°ãäžèšã®ãµã€ãfonts.googleapis.comã¯ãå®éã®CSSèŠæ±ãè¡ãããåã«æ¥ç¶ããå ŽåããããŸãã
ãµãŒããŒæ¥ç¶ãåå©çšããŠãªã¯ãšã¹ããé«éå
éåžžãæ°ãããµãŒããŒæ¥ç¶ã確ç«ããã«ã¯ããã©ãŠã¶ãŒãšãµãŒããŒéã§3åã®ã©ãŠã³ãããªãããã¹ãå¿ èŠã§ãã
- DNSã«ãã¯ã¢ãã
- TCPæ¥ç¶ã®ç¢ºç«
- SSLæ¥ç¶ã®ç¢ºç«
æ¥ç¶ã確ç«ãããããå°ãªããšããã1åã®ã©ãŠã³ãããªãããå¿ èŠã§ãããªã¯ãšã¹ããéä¿¡ããã¬ã¹ãã³ã¹ãããŠã³ããŒãããŸãã
以äžã®ã«ã¹ã±ãŒãã«ç€ºãããã«ãæ¥ç¶ã¯ãhostgator.comãoptimizely.comãgoogletagmanager.comãããã³googelapis.comã®4ã€ã®ç°ãªããµãŒããŒã«å¯ŸããŠéå§ãããŸãã
ãã ãã圱é¿ãåãããµãŒããŒãžã®åŸç¶ã®èŠæ±ã¯ãæ¢åã®æ¥ç¶ãåå©çšã§ããŸãããããã£ãŠã
base.cssãŸãã¯index1.cssãããã¯ãŸãhostgator.comã«äœçœ®ããŠããã®ã§ãããã«ããŒããããŸãã
ãã¡ã€ã«ãµã€ãºã®çž®å°ãšã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ïŒCDNïŒã®äœ¿çš
å¶åŸ¡ããä»ã®2ã€ã®èŠçŽ ã¯ããã¡ã€ã«ãµã€ãºãšãšãã«ããªã¯ãšã¹ãã®æéã«åœ±é¿ããŸãããªãœãŒã¹ã®ãµã€ãºãšãµãŒããŒã®å Žæã§ãã
ããã«ãå¿ èŠæå°éã®ããŒã¿ããŠãŒã¶ãŒã«éä¿¡ããå§çž®ã«æ³šæããŸãïŒããšãã°ãbrotliãŸãã¯gzipã䜿çšããŸãïŒã
ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ïŒCDNïŒã¯ããŸããŸãªå Žæã«ãµãŒããŒãæäŸããããããã®ãã¡ã®1ã€ããŠãŒã¶ãŒã®è¿ãã«é 眮ãããå¯èœæ§ãé«ããªããŸããããããäžå€®ã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã§ã¯ãªããCDNäžã®æãè¿ããµãŒããŒã«æ¥ç¶ã§ããŸãããããã£ãŠããµãŒããŒãšã®éã®ããŒã¿ãã¹ãå€§å¹ ã«åæžãããŸããããã¯ãCSSãJavaScriptãç»åãªã©ã®éçãªãœãŒã¹ãç°¡åã«é åžã§ãããããããããæäœããå Žåã«ç¹ã«äŸ¿å©ã§ãã
ãµãŒãã¹ã¯ãŒã«ãŒã«ãããããã¯ãŒã¯ã®ãã€ãã¹
Service Workerã䜿çšãããšããªã¯ãšã¹ãããããã¯ãŒã¯ã«å ¥ãåã«ã€ã³ã¿ãŒã»ããã§ããŸãããããã£ãŠãæåã®ã¬ã³ããªã³ã°ã¯ã»ãŒç¬æã«çºçããå¯èœæ§ããããŸãã
ãã¡ãããããã¯ããããã¯ãŒã¯ã«åã«å¿çãéä¿¡ããããå Žåã«ã®ã¿æ©èœããŸãããã®å¿çã¯ãã§ã«ãã£ãã·ã¥ãããŠããã¯ããªã®ã§ããŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ãåããŠã³ããŒããããšãã®äœæ¥ã楜ã«ãªããŸãã
以äžã«ç€ºãServiceWorkerã¯ãããŒãžã®ã¬ã³ããªã³ã°ã«å¿ èŠãªHTMLãšCSSããã£ãã·ã¥ããŸããåããŒãããããšãã¢ããªã±ãŒã·ã§ã³ã¯ãã£ãã·ã¥ããããªãœãŒã¹ãçºè¡ããããšããããããå©çšã§ããªãå Žåã¯ããã©ãŒã«ããã¯ãšããŠãããã¯ãŒã¯ã«åãæ¿ããŸãã
self.addEventListener("install", async e => {
caches.open("v1").then(function (cache) {
return cache.addAll(["/app", "/app.css"]);
});
});
self.addEventListener("fetch", event => {
event.respondWith(
caches.match(event.request).then(cachedResponse => {
return cachedResponse || fetch(event.request);
})
);
});
Service Workerã䜿çšãããªãœãŒã¹ã®ããªããŒããšãã£ãã·ã¥ã®è©³çްã«ã€ããŠã¯ããã®ãã¥ãŒããªã¢ã«ãåç §ããŠãã ããã
ã¢ããªã±ãŒã·ã§ã³ã®ããŠã³ããŒã
ããŠãç§ãã¡ã®ãŠãŒã¶ãŒã¯ãã§ã«äœããèŠãŠããŸãã圌ãç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã䜿çšã§ããããã«ããããã«ä»ã«äœãå¿ èŠã§ããïŒ
- ã¢ããªã®èªã¿èŸŒã¿ïŒJSããã³CSSïŒ
- ããŒãžã®æãéèŠãªããŒã¿ã®èªã¿èŸŒã¿
- 远å ã®ããŒã¿ãšç»åãããŠã³ããŒããã
ãããã¯ãŒã¯çµç±ã§ããŒã¿ãããŒãããã ãã§ãªããã¬ã³ããªã³ã°ãé ããªãå¯èœæ§ãããããšã«æ³šæããŠãã ãããã³ãŒããããŒãããããšããã©ãŠã¶ã¯ã³ãŒããè§£æãã³ã³ãã€ã«ãããã³å®è¡ããå¿ èŠããããŸãã
ãã³ãã«ã®åå²ïŒå¿ èŠãªã³ãŒãã®ã¿ãããŒããããã£ãã·ã¥ããããæå€§åããŸãã
ãã³ãã«ãåå²ããããšã§ããã®ããŒãžã«ã®ã¿å¿ èŠãªã³ãŒãã®ã¿ãããŠã³ããŒãã§ããã¢ããªã±ãŒã·ã§ã³å šäœãããŠã³ããŒãããããšã¯ã§ããŸããããã³ãã«ãåå²ãããšãã³ãŒãã®ä»ã®éšåã倿ŽãããŠåããŒãããå¿ èŠãããå Žåã§ãããã³ãã«ãéšåçã«ãã£ãã·ã¥ã§ããŸãã
éåžžãã³ãŒãã¯3ã€ã®ç°ãªãã¿ã€ãã®ãã¡ã€ã«ã§æ§æãããŸãã
- ãã®ããŒãžã«åºæã®ã³ãŒã
- å ±æã¢ããªã±ãŒã·ã§ã³ã³ãŒã
- ãã£ãã«å€æŽãããªããµãŒãããŒãã£ã¢ãžã¥ãŒã«ïŒãã£ãã·ã³ã°ã«æé©ïŒïŒ
Webpackã¯ãåå²ã³ãŒããèªåçã«åå²ããŠãããŠã³ããŒãã®å šäœçãªéã¿ãæžããããšãã§ããŸããããã¯ãoptimization.splitChunksã䜿çšããŠè¡ãããŸãããã£ã³ã¯ã®ããã·ã¥ãå®å®ãããŸãŸã§ãããé·æãã£ãã·ã³ã°ãæå¹ã«é©çšã§ããããã«ãå¿ ãã©ã³ã¿ã€ã ãã£ã³ã¯ãæå¹ã«ããŠãã ããã Ivan Akulovã¯ãWebpackã³ãŒãã®å ±æãšãã£ãã·ã¥ã«é¢ããå æ¬çãªã¬ã€ããäœæããŸããã
ããŒãžåºæã®ã³ãŒãã®åå²ã¯èªåçã«å®è¡ã§ããªããããåå¥ã«ããŒãã§ããã¹ãããããç¹å®ããå¿ èŠããããŸããããã¯å€ãã®å Žåãç¹å®ã®ã«ãŒããŸãã¯ããŒãžã®ã»ããã§ããåçã€ã³ããŒãã䜿çšããŠããã®ãããªã³ãŒããé å»¶ããŒãããŸãã
ãã³ãã«ãåå²ãããšãã¢ããªã±ãŒã·ã§ã³ãå®å šã«ããŒãããããã«ããå€ãã®èŠæ±ãè¡ãããŸãããã ããèŠæ±ã䞊ååãããŠããå Žåãç¹ã«HTTP / 2ã䜿çšããŠãããµã€ãã§ã¯ããã®åé¡ã¯å€§ãããããŸããããã®ã«ã¹ã±ãŒãã®æåã®3ã€ã®ã¯ãšãªã«æ³šæããŠãã ããã
ãã ãããã®ã«ã¹ã±ãŒãã«ã¯ã2ã€ã®ã¯ãšãªãé çªã«å®è¡ãããŠããããšã瀺ãããŠããŸãããããã®ãã©ã°ã¡ã³ãã¯ãã®ããŒãžã«ã®ã¿å¿ èŠã§ãããåŒã³åºãã䜿çšããŠåçã«ããŒããããŸã
import()ããããã®ãã©ã°ã¡ã³ãã確å®ã«å¿
èŠã«ãªãããšãããã£ãŠããå Žåã¯
ãã¿ã°ãæ¿å ¥ããããšã§ãããä¿®æ£ã§ããŸã
preload linkã
ãã ããã芧ã®ãšããããã®å Žåã®é床ã®åäžã¯ãããŒãžã®åèšèªã¿èŸŒã¿æéã«æ¯ã¹ãŠå°ããå ŽåããããŸãã
ããã«ãããªããŒãã䜿çšãããšé广ã«ãªãããšããããä»ã®ããéèŠãªãã¡ã€ã«ãããŒãããããšãã«é å»¶ãçºçããå¯èœæ§ããããŸãããã©ã³ãã®ããªããŒãã«é¢ããAndyDavisã®æçš¿ãšãæåã«ãã©ã³ããããŒãããŠãããã¬ã³ããªã³ã°ã劚ããCSSãããŒãããããšã«ããããã©ã€ããªã¬ã³ããªã³ã°ããããã¯ããæ¹æ³ã確èªããŠãã ããã
ããŒãžããŒã¿ã®èªã¿èŸŒã¿
ãããããã¢ããªã±ãŒã·ã§ã³ã¯ããçš®ã®ããŒã¿ã衚瀺ããããã«èšèšãããŠããŸããäºåã«ããŒã¿ãããŒãããã¬ã³ããªã³ã°ã®é å»¶ãåé¿ããããã®ãã³ããããã€ã玹ä»ããŸãã
ãã³ãã«ãåŸ ããã«ãããã«ããŒã¿ã®ããŒããéå§ããŸãã
é æ¬¡ãªã¯ãšã¹ããé£éããç¹æ®ãªã±ãŒã¹ãããå ŽåããããŸããã¢ããªã±ãŒã·ã§ã³ãã³ãã«ãããŒããããšããã®ã³ãŒãã¯ãã§ã«ããŒãžããŒã¿ããªã¯ãšã¹ãããŠããŸãã
ãããåé¿ããæ¹æ³ã¯2ã€ãããŸãã
- ããŒãžããŒã¿ãHTMLããã¥ã¡ã³ãã«åã蟌ã
- ããã¥ã¡ã³ãå ã®ã€ã³ã©ã€ã³ã¹ã¯ãªãããä»ããŠããŒã¿ã®èŠæ±ãéå§ããŸã
HTMLã«ããŒã¿ãåã蟌ãããšã§ãã¢ããªã±ãŒã·ã§ã³ã¯ããŒã¿ã®ããŒããåŸ ã€å¿ èŠããªããªããŸãããŸããããŒãç¶æ ãåŠçããå¿ èŠããªããããã¢ããªã±ãŒã·ã§ã³ã®å šäœçãªè€éãã軜æžãããŸãã
ãã ããããŒã¿ããã§ãããããšããã¥ã¡ã³ãã®å¿çãå€§å¹ ã«é ããå Žåããã®ã¢ã€ãã¢ã¯ããŸãé©åã§ã¯ãããŸãããæåã®ã¬ã³ããªã³ã°ãé ããªãããã§ãã
ãã®å ŽåããŸãã¯Service Workerã䜿çšããŠãã£ãã·ã¥ãããHTMLããã¥ã¡ã³ããæäŸãããšãã«ããã®ããŒã¿ãããŒãããã€ã³ã©ã€ã³ã¹ã¯ãªãããHTMLã«åã蟌ãããšãã§ããŸããããã¯ã次ã®ããã«ã°ããŒãã«ãªçŽæãšããŠæäŸã§ããŸãã
window.userDataPromise = fetch("/me")
次ã«ãããŒã¿ã®æºåãã§ããŠããå Žåãã¢ããªã±ãŒã·ã§ã³ã¯ããã«ã¬ã³ããªã³ã°ãéå§ããããæºåãã§ãããŸã§åŸ ã€ããšãã§ããŸãã
ãããã®äž¡æ¹ã®æ¹æ³ã䜿çšããå Žåãã¢ããªã±ãŒã·ã§ã³ãã¬ã³ããªã³ã°ãéå§ããåã§ãã£ãŠããããŒãžã«è¡šç€ºããããŒã¿ãæ£ç¢ºã«ç¥ãå¿ èŠããããŸããããã¯éåžžããŠãŒã¶ãŒåºæã®ããŒã¿ïŒååãéç¥ãªã©ïŒãæäŸããã®ã¯ç°¡åã§ãããããŒãžåºæã®ã³ã³ãã³ããåŠçããå Žåã¯ç°¡åã§ã¯ãããŸãããæãéèŠãªããŒãžãèªåã§åŒ·èª¿è¡šç€ºããããããã«ç¬èªã®ããžãã¯ãèšè¿°ããŠãã ããã
ç¡é¢ä¿ãªããŒã¿ãåŸ ã£ãŠããéã¯ã¬ã³ããªã³ã°ããããã¯ããªãã§ãã ãã
ããŒãžããŒã¿ãçæããã«ã¯ãããã¯ãšã³ãã«å®è£ ãããäœéã§è€éãªããžãã¯ãå¿ èŠã«ãªãå ŽåããããŸãããã®ãããªå Žåãã¢ããªã±ãŒã·ã§ã³ãæ©èœçãã€ã€ã³ã¿ã©ã¯ãã£ãã«ããã®ã«ååã§ããã°ãæåã«ããŒã¿ã®ç°¡ç¥åãããããŒãžã§ã³ãããŒãã§ãããšäŸ¿å©ã§ãã
ããšãã°ãåæããŒã«ã¯ãæåã«ãã¹ãŠã®ãã£ãŒããããŒãããŠããããããã«ããŒã¿ãæ·»ä»ããå ŽåããããŸãããããã£ãŠããŠãŒã¶ãŒã¯èå³ã®ããå³ãããã«èŠãããšãã§ããããã¯ãšã³ãèŠæ±ãããŸããŸãªãµãŒããŒã«åæ£ããæéããããŸãã
ã·ãŒã±ã³ã·ã£ã«ããŒã¿ã¯ãšãªã®é£éãåé¿ãã
ãã®ã¢ããã€ã¹ã¯ãç¡é¢ä¿ãªããŒã¿ã®ããŒãã2çªç®ã®ãªã¯ãšã¹ãã«å»¶æããããšã«ã€ããŠè©±ããŠãã以åã®ãã€ã³ããšççŸããŠããããã«èŠãããããããŸããããã ãããã§ãŒã³å ã®åŸç¶ã®ãªã¯ãšã¹ãããŠãŒã¶ãŒã«æ°ããæ å ±ãæäŸããªãå Žåã¯ãã·ãŒã±ã³ã·ã£ã«ãªã¯ãšã¹ãããã§ãŒã³ããããšã¯é¿ããŠãã ããã
æåã«ãŠãŒã¶ãŒããã°ã€ã³ããŠãããã®ãå°ããŠããããŠãŒã¶ãŒãå±ããã°ã«ãŒãã®ãªã¹ããå°ãã代ããã«ããŠãŒã¶ãŒã«é¢ããæ å ±ãšãšãã«ã°ã«ãŒãã®ãªã¹ããè¿ããŸããããã«ã¯GraphQLã䜿çšã§ããŸãããã«ã¹ã¿ã ãšã³ããã€ã³ãã§ã
user?includeTeams=trueåé¡ãããŸããã
ãµãŒããŒåŽã®ã¬ã³ããªã³ã°
ãã®å ŽåããµãŒããŒäžã§ã®ã¢ããªã±ãŒã·ã§ã³ã®äºåã¬ã³ããªã³ã°ãæå³ããæ¬æ ŒçãªHTMLããŒãžãããã¥ã¡ã³ãããã®èŠæ±ãžã®å¿çãšããŠæäŸãããŸãããããã£ãŠãã¯ã©ã€ã¢ã³ãã¯ã远å ã®ã³ãŒããŸãã¯ããŒã¿ãããŒããããã®ãåŸ ããã«ãããŒãžå šäœãèŠãããšãã§ããŸãã
ãµãŒããŒã¯éçHTMLã®ã¿ãã¯ã©ã€ã¢ã³ãã«éä¿¡ããŠããããããã®æ®µéã§ã¯ã¢ããªã±ãŒã·ã§ã³ã«ã¯ãŸã 察話æ§ããããŸãããã¢ããªã±ãŒã·ã§ã³ãããŒãããã¬ã³ããªã³ã°ããžãã¯ãåå®è¡ããŠãããå¿ èŠãªã€ãã³ããªã¹ããŒãDOMã«æ¥ç¶ããå¿ èŠããããŸãã
éã€ã³ã¿ã©ã¯ãã£ããªã³ã³ãã³ããããèªäœã§äŸ¡å€ãããããšãããã£ãå Žåã¯ããµãŒããŒåŽã®ã¬ã³ããªã³ã°ã䜿çšããŸãããŸãããã®ã¢ãããŒãã¯ããµãŒããŒã«è¡šç€ºãããHTMLããã£ãã·ã¥ããããã¥ã¡ã³ããæåã«èŠæ±ããããšãã«é æ»ãªããã¹ãŠã®ãŠãŒã¶ãŒã«è»¢éããã®ã«åœ¹ç«ã¡ãŸããããšãã°ãReactã䜿çšããŠããã°ã衚瀺ããŠããå ŽåããµãŒããŒåŽã®ã¬ã³ããªã³ã°ã¯åªããŠããŸããMichalJanaszekã«ãã
ãã®èšäºãèªãã§ãã ãããServiceWorkerããµãŒããŒåŽã®ã¬ã³ããªã³ã°ãšçµã¿åãããæ¹æ³ã«ã€ããŠè©³ãã説æããŠããŸãã
次ã®ããŒãž
ããæç¹ã§ãã¢ããªã±ãŒã·ã§ã³ãæäœããŠãããŠãŒã¶ãŒã¯æ¬¡ã®ããŒãžã«ç§»åããå¿ èŠããããŸããæåã®ããŒãžãéããŠãããšãã¯ããã©ãŠã¶ã§çºçãããã¹ãŠã®ããšãå¶åŸ¡ã§ãããããæ¬¡ã®æäœã®æºåãããããšãã§ããŸãã
ãªãœãŒã¹ã®
ããªãã§ããæ¬¡ã®ããŒãžã衚瀺ããããã«å¿ èŠãªã³ãŒããããªãã§ãããããšãã«ã¹ã¿ã ããã²ãŒã·ã§ã³ã®é å»¶ãåé¿ã§ããŸããã¿ã°ã䜿çšãã
prefetch linkãwebpackPrefetchãåçã€ã³ããŒãã«äœ¿çšããŸãã
import(
/* webpackPrefetch: true, webpackChunkName: "todo-list" */ "./TodoList"
)
ç¹ã«ã¢ãã€ã«æ¥ç¶ã«é¢ããŠã¯ã䜿çšããŠãããŠãŒã¶ãŒããŒã¿ã®éãšåž¯åå¹ ãèæ ®ããŠãã ãããããªããŒãã«ç±å¿ã«ãªããªãã£ãããããŒã¿ä¿åã¢ãŒããæå¹ã«ãªã£ãŠããå Žåã¯ãã¢ãã€ã«çã®ãµã€ãã«ãããŸãã
ãŠãŒã¶ãŒãæãå¿ èŠãšããããŒã¿ãæŠç¥çã«éžæããŸãã
ãã§ã«ããŒããããŠããããŒã¿ãåå©çš
ããã¢ããªã±ãŒã·ã§ã³ã§AjaxããŒã¿ãããŒã«ã«ã«ãã£ãã·ã¥ããŠãåŸã§äžèŠãªèŠæ±ãåé¿ããŸãããŠãŒã¶ãŒã[ã°ã«ãŒãã®ç·šé]ããŒãžã§ã°ã«ãŒãã®ãªã¹ãã«ç§»åããå Žåã以åã«éžæããããŒã¿ãåå©çšããããšã§ãããã«ç§»è¡ãè¡ãããšãã§ããŸãã
ãªããžã§ã¯ããä»ã®ãŠãŒã¶ãŒã«ãã£ãŠé »ç¹ã«ç·šéãããã¢ããããŒãããããŒã¿ãããã«å€ããªãå¯èœæ§ãããå Žåãããã¯æ©èœããªãããšã«æ³šæããŠãã ããããã®ãããªå Žåã¯ãæåã«æ¢åã®ããŒã¿ãèªã¿åãå°çšã¢ãŒãã§è¡šç€ºãããã®éã«æŽæ°ãããããŒã¿ãéžæããŠã¿ãŠãã ããã
çµè«
ãã®èšäºã§ã¯ãèªã¿èŸŒã¿ããã»ã¹ã®ããŸããŸãªæç¹ã§ããŒãžã®é床ãäœäžãããå¯èœæ§ã®ããããã€ãã®èŠå ã«ã€ããŠèª¬æããŸããããªã©ã®ããŒã«ã䜿çšãã¯ããŒã ããããããŒããŒã«ãWebPageTestãããã³ç¯å°ã¯ãã¢ããªã±ãŒã·ã§ã³ã«é¢é£ããã©ã®ãã³ããæ±ºå®ããŸãã
å®éã«ã¯ãå æ¬çãªæé©åãå®è¡ããããšã¯ãã£ãã«äžå¯èœã§ãããŠãŒã¶ãŒã«ãšã£ãŠäœãæãéèŠãã倿ããããã«çŠç¹ãåãããŸãã
ãã®èšäºã«åãçµãã§ãããšãè€æ°ã®ã¯ãšãªã¯ããã©ãŒãã³ã¹ã®åé¡ã§ãããšããæ·±ã信念ãå ±æããŠããããšã«æ°ä»ããŸãããããã¯éå»ã®ã±ãŒã¹ã§ãããåãªã¯ãšã¹ãã«ã¯åå¥ã®æ¥ç¶ãå¿ èŠã§ããããã©ãŠã¶ã¯ãã¡ã€ã³ããšã«æ°åã®æ¥ç¶ããèš±å¯ããŠããŸããã§ããããããããã®åé¡ã¯HTTP / 2ãšææ°ã®ãã©ãŠã¶ãŒã®åºçŸã§è§£æ¶ãããŸããã
ã¯ãšãªãåå²ããããšã«ã¯åŒ·ãè°è«ããããŸãããããè¡ãããšã«ããã倿Žããããã¡ã€ã«ããªããŒãããã ãã§ãããããå³å¯ã«å¿ èŠãªãªãœãŒã¹ãããŒããããã£ãã·ã¥ãããã³ã³ãã³ããããæå¹ã«æŽ»çšã§ããŸãã