
ããã«ã¡ã¯ ç§ã®ååã¯ã¢ã¬ã¯ãµã³ããŒã§ããç§ã¯Badooã®ããã³ããšã³ãéçºè
ã§ãã ãããããããæ°å¹Žã§ããã³ããšã³ãã®äžçã§æãè°è«ãããŠãããããã¯ã®1ã€ã¯ãHTTP / 2ãããã³ã«ã§ãããã ç¡é§ã§ã¯ãããŸãã-ãããžã®ç§»è¡ã¯ãéçºè
ããµã€ããã¹ããŒãã¢ããããŠæé©åããå€ãã®æ©äŒãéãããã§ãã ãã®æçš¿ã¯ããããã®æ©èœã®1ã€ã§ãããµãŒããŒããã·ã¥å°çšã§ãã ãžã§ã¬ããŒã»ã¯ã°ããŒã®èšäºã¯ç§ã«ãšã£ãŠè峿·±ãæããã®ã§ãæçãªæ
å ±ãããªããšå
±æããŠããŸãã
å°ãåãŸã§ãããã©ãŒãã³ã¹æåã®éçºè
ã®èœåã¯èããå€åããŸããã ãããŠãHTTP / 2ã®åºçŸã¯ããããæãéèŠãªå€åã§ããã HTTP / 2ã¯ç§ãã¡ã楜ãã¿ã«ããŠããæ©èœã§ã¯ãªããªããŸãã-æ¢ã«ååšãïŒHTTP / 1ã«ååšãããã¥ãŒã®å
é ãéå§çž®ããããŒã®ãããã¯ãªã©ã®åé¡ã«ããŸã察åŠããŸãïŒããµãŒããŒããã·ã¥ã«ä»å±ããŠããŸãïŒ
ãã®ãã¯ãããžãŒã«ããããŠãŒã¶ãŒã¯ãµã€ããªãœãŒã¹ãéä¿¡ããåã«éä¿¡ã§ããŸãã ããã¯ãåã蟌ã¿ãªã©ã®HTTP / 1æé©åæ¹æ³ã§ããã©ãŒãã³ã¹ã®å©ç¹ãéæãããã®ãã©ã¯ãã£ã¹ã«é¢é£ããæ¬ ç¹ãåé¿ããããã®ãšã¬ã¬ã³ããªæ¹æ³ã§ãã
ãã®èšäºã§ã¯ãæäœã®åçãã解決ããåé¡ãŸã§ããµãŒããŒããã·ã¥ã«é¢ãããã¹ãŠã®ããšãåŠç¿ããŸããäœ¿çšæ¹æ³ãæ©èœãããã©ãããããã©ãŒãã³ã¹ãžã®åœ±é¿ãªã©ã倿ããæ¹æ³ãªã©ã§ãã
ãµãŒããŒããã·ã¥ãšã¯äœã§ããïŒ
Webãµã€ããžã®ã¢ã¯ã»ã¹ã¯ãåžžã«ããªã¯ãšã¹ã/ã¬ã¹ãã³ã¹ããã³ãã¬ãŒãã«åŸã£ãŠå®è¡ãããŸãããŠãŒã¶ãŒã¯ãªã¢ãŒããµãŒããŒã«ãªã¯ãšã¹ããéä¿¡ããŸãããªã¢ãŒããµãŒããŒã¯ããªã¯ãšã¹ããããã³ã³ãã³ããå«ãã¬ã¹ãã³ã¹ãé
å»¶ããŠéä¿¡ããŸãã
éåžžãWebãµãŒããŒãžã®æåã®èŠæ±ã¯HTMLããã¥ã¡ã³ããèŠæ±ããŸãã ãµãŒããŒã¯ãèŠæ±ãããHTMLãªãœãŒã¹ã§å¿çããŸãã çµæã®HTMLããã¥ã¡ã³ãã¯ãã©ãŠã¶ã«ãã£ãŠåæããããã®çµæãã¹ã¿ã€ã«ã·ãŒããã¹ã¯ãªãããç»åãªã©ã®ä»ã®ãªãœãŒã¹ãžã®ãªã³ã¯ãæœåºãããŸãã ããããæ€åºãããåŸããã©ãŠã¶ã¯åãªãœãŒã¹ã«å¯ŸããŠåå¥ã®ãªã¯ãšã¹ããéä¿¡ãã察å¿ããã¬ã¹ãã³ã¹ãåä¿¡ããŸãã

ãã®ã¡ã«ããºã ã®åé¡ã¯ãHTMLããã¥ã¡ã³ããããŒããããåŸããã©ãŠã¶ãŒãå¿
èŠãªãªãœãŒã¹ãæ€åºããŠååŸãããŸã§ãŠãŒã¶ãŒãåŸ
æ©ãããããšã§ãã ããã«ãããã¬ã³ããªã³ã°ãé
ããããŒãæéãé·ããªããŸãã
ãã®åé¡ã®è§£æ±ºçããããŸãã ãµãŒããŒããã·ã¥ã䜿çšãããšããŠãŒã¶ãŒãæç€ºçã«èŠæ±ããåã«ããµãŒããŒãWebãµã€ããªãœãŒã¹ãã¯ã©ã€ã¢ã³ãã«ããã¢ã¯ãã£ãã«ãããã·ã¥ãã§ããŸãã ã€ãŸãããªã¯ãšã¹ããããããŒãžã«ãŠãŒã¶ãŒãå¿
èŠãšããããšãããã£ãŠããæ
å ±ãäºåã«éä¿¡ã§ããŸãã
ãã¹ãŠã®ããŒãžãstyles.css
ãšåŒã°ããå€éšã¹ã¿ã€ã«ã·ãŒãã§å®çŸ©ãããã¹ã¿ã€ã«ã«äŸåããŠããWebãµã€ãããããšãstyles.css
ã ãŠãŒã¶ãŒããµãŒããŒããindex.htmlãèŠæ±ãããšãindex.htmlã®å¿çã®éä¿¡ãéå§ããçŽåŸã«styles.css
ãéä¿¡styles.css
ã

ãµãŒããŒãindex.html
éä¿¡ãããŸã§åŸ
æ©ãã代ããã«ããã©ãŠã¶ãstyles.css
ãªã¯ãšã¹ãããŠåä¿¡ããéããŠãŒã¶ãŒã¯æåã®ãªã¯ãšã¹ãã«å¯ŸããåçãåŸ
ã€ã ãã§æžã¿ãŸãã ãã®åçã«ã¯ã index.html
ãšstyles.css
äž¡æ¹ã®ãã¡ã€ã«ãå«ãŸãstyles.css
ã ããã¯ããã©ãŠã¶ãåŸ
ããªããã°ãªããªãå ŽåãããéãããŒãžã®ã¬ã³ããªã³ã°ãéå§ã§ããããšãæå³ããŸãã
ã芧ã®ãšããããµãŒããŒããã·ã¥ã䜿çšãããšãããŒãžã®ã¬ã³ããªã³ã°æéãççž®ã§ããŸãã ãŸããä»ã®ããã€ãã®åé¡ãç¹ã«ããã³ããšã³ãéçºã«é¢ããåé¡ã解決ããŸãã
ãµãŒããŒããã·ã¥ã¯ã©ã®ãããªåé¡ã解決ããŸããïŒ
éèŠãªã³ã³ãã³ããåä¿¡ããããã®ãµãŒããŒãžã®åŒã³åºãã®æ°ãæžããããšã¯ããµãŒããŒããã·ã¥ã解決ããåé¡ã®1ã€ã«ãããŸããããæ±ºããŠå¯äžã®åé¡ã§ã¯ãããŸããã
ãã®ããããµãŒããŒããã·ã¥ã¯ãCSSãšJavaScriptãHTMLã«çŽæ¥åã蟌ããã ããŒã¿URIã¹ããŒã ã䜿çšããŠãã€ããªããŒã¿ãCSSãšHTMLã«åã蟌ããªã©ãHTTP / 1æé©åã®å€ãã®ã¢ã³ããã¿ãŒã³ã®é©åãªä»£æ¿ææ®µã§ãã ãããã®ã¡ãœããã¯ã䞻芳çãªããŒãžèªã¿èŸŒã¿æéãççž®ãããããHTTP / 1ã®æé©åã«åœ¹ç«ã¡ãŸãã ã€ãŸããããŒãžã®åèšèªã¿èŸŒã¿æéã¯ççž®ã§ããŸãããããŠãŒã¶ãŒã®ããŒãžã®èªã¿èŸŒã¿ã¯é«éã«ãªããŸãã
ããã¯ç¢ºãã«çã«ããªã£ãŠããŸãã <style>
ã¿ã°ã§HTMLããã¥ã¡ã³ãã«CSSãåã蟌ããšããã©ãŠã¶ãŒã¯ãå€éšãœãŒã¹ããã¹ã¿ã€ã«ãæœåºãããã®ãåŸ
ããã«ãããã«HTMLã«ã¹ã¿ã€ã«ãé©çšã§ããŸãã ãã®æŠå¿µã¯ãããŒã¿URIã¹ããŒã ã䜿çšããŠãåã蟌ã¿ã¹ã¯ãªãããšãã€ããªããŒã¿ã®äž¡æ¹ã§æ©èœããŸãã

ããã¯åé¡ã解決ããè¯ãæ¹æ³ã®ããã§ãããïŒ HTTP / 1ã®å Žåãä»ã«éžæè¢ã¯ãããŸãã-ãã¡ããã§ãïŒ ããããã³ã€ã³ã®è£åŽã¯ãåã蟌ãŸããã³ã³ãã³ããå¹ççã«ãã£ãã·ã¥ã§ããªãããšã§ãã ãªãœãŒã¹ïŒã¹ã¿ã€ã«ã·ãŒããJavaScriptãã¡ã€ã«ãªã©ïŒãå€éšã§ã¢ãžã¥ãŒã«åŒã®ãŸãŸã§ããå Žåãã¯ããã«å¹ççã«ãã£ãã·ã¥ã§ããŸãã ãŸãããŠãŒã¶ãŒãåããªãœãŒã¹ãå¿
èŠãšããæ¬¡ã®ããŒãžã«ç§»åãããšããã£ãã·ã¥ããååŸã§ããããã远å ã®ãµãŒããŒèŠæ±ãäžèŠã«ãªããŸãã

ãã ããã³ã³ãã³ããåã蟌ãå Žåãç¬èªã®ãã£ãã·ã¥ã³ã³ããã¹ãã¯ãããŸããããã£ãã·ã¥ã³ã³ããã¹ãã¯ãã³ã³ãã³ããåã蟌ãŸããŠãããªãœãŒã¹ãšäžèŽããŸãã ããšãã°ãCSSãåã蟌ãŸããHTMLããã¥ã¡ã³ããåãäžããŸãã HTMLããã¥ã¡ã³ãã®ãã£ãã·ã¥ããªã·ãŒã«ãããåžžã«ãµãŒããŒããããŒã¯ã¢ããã®æ°ããã³ããŒãããŠã³ããŒãããå¿
èŠãããå Žåãåã蟌ãŸããCSSãåç¬ã§ãã£ãã·ã¥ãããããšã¯ãããŸããã ãã¡ãããåã蟌ãŸããŠããããã¥ã¡ã³ãã¯ãã£ãã·ã¥ã§ããŸãããåãè€è£œãããCSSãå«ãä»ã®ããŒãžã¯ãªããŒããããŸãã ãŸãããã£ãã·ã¥ããªã·ãŒãããã»ã©å³ãããªãå Žåã§ããHTMLããã¥ã¡ã³ãã®æå¹æéã¯éåžžéãããŠããŸãã ãã ããããã¯ãHTTP / 1ãæé©åãããšãã«çšæããåŠ¥åæ¡ã§ãã ããã¯å®éã«æ©èœãããµã€ããåããŠèšªããå Žåã«ã¯éåžžã«å¹æçã§ãã ãããã第äžå°è±¡ã¯ãã°ãã°æ±ºå®çã§ãã
ãããã¯ããµãŒããŒããã·ã¥ãåŠçããåé¡ã§ãã ãªãœãŒã¹ãããã·ã¥ãããšãåãèŸŒã¿æãšåãå®çšçãªå©ç¹ãåŸãããŸãããç¬èªã®ãã£ãã·ã¥ããªã·ãŒãæã€å€éšãã¡ã€ã«ã«ãªãœãŒã¹ãä¿åã§ããŸãã 確ãã«ããã®ããã»ã¹ã§ã¯ãèšäºã®æåŸã§èæ
®ããããã¥ã¢ã³ã¹ã1ã€ãããŸãã ãããŸã§ã®éãç¶ããŸãããã
ãµãŒããŒããã·ã¥ã®äœ¿çšãæ€èšããçç±ã«ã€ããŠååã«èª¬æãããã®ãã¯ãããžããŠãŒã¶ãŒãšéçºè
ã®äž¡æ¹ã«ãšã£ãŠè§£æ±ºããåé¡ã®ç¯å²ã«ã€ããŠãæŠèª¬ããŸããã æ¬¡ã«ããã®äœ¿ç𿹿³ã«ã€ããŠèª¬æããŸãããã
ãµãŒããŒããã·ã¥ã®äœ¿ç𿹿³
ãµãŒããŒããã·ã¥ã䜿çšããã«ã¯ãéåžžãæ¬¡ã®åœ¢åŒã®Link
HTTPããããŒã䜿çšããå¿
èŠããããŸãã
Link: </css/styles.css>; rel=preload; as=style
éç¥ãç§ã¯ãéåžžããšèšããŸããã äžèšã®å
容ã¯ãå®éã«preload
ããªããŒããªãœãŒã¹ preload
ãã³ãã§ã ïŒ ããªããŒããªãœãŒã¹ãã³ã ïŒã ããã¯ãµãŒããŒããã·ã¥ä»¥å€ã®åå¥ã®æé©åã§ãããã»ãšãã©ã®ïŒãã¹ãŠã§ã¯ãªãïŒHTTP / 2å®è£
ã¯ã preload
ãªãœãŒã¹preload
ãå«ãLink
ããããŒã§æå®ããããªããžã§ã¯ããããã·ã¥ããŸãã ãµãŒããŒãŸãã¯ã¯ã©ã€ã¢ã³ããããã·ã¥ããããªãœãŒã¹ã®åãå
¥ããæåŠããå Žåã§ããã¯ã©ã€ã¢ã³ãã¯æå®ããããªãœãŒã¹ã®æ©æååŸãéå§ã§ããŸãã
ããããŒã®as=style
éšåã¯ãªãã·ã§ã³ã§ãã ããã·ã¥ãããã³ã³ãã³ãã®ã¿ã€ãã«ã€ããŠãã©ãŠã¶ã«éç¥ããŸãã ãã®å Žåã style
å€ã䜿çšããŠããªããžã§ã¯ããã¹ã¿ã€ã«ã·ãŒãã§ããããšã瀺ããŸãïŒ ä»ã®ã¿ã€ãã®ã³ã³ãã³ããæå®ã§ããŸãïŒã as
å€ãã¹ããããããšããã©ãŠã¶ãŒãããã·ã¥ããããªãœãŒã¹ã2åããŒãããå¯èœæ§ãããããšã«æ³šæããããšãéèŠã§ãã å¿ããªãã§ãã ããïŒ
ããã·ã¥ã®éå§æ¹æ³ãããã£ãã®ã§ã Link
ããããŒãèšå®ããæ¹æ³ãæ€èšããŠãã ããã ãããè¡ãã«ã¯2ã€ã®æ¹æ³ããããŸãã
- WebãµãŒããŒèšå®ïŒäŸïŒApacheã®
httpd.conf
ãŸãã¯.htaccess
ïŒ - ããã¯ãšã³ãèšèªé¢æ°ïŒããšãã°ãPHP
header
颿°ïŒã
WebãµãŒããŒèšå®ã§ã®Link
ããããŒã®èšå®
HTMLãã¡ã€ã«ãèŠæ±ããããã³ã«ã¹ã¿ã€ã«ã·ãŒããããã·ã¥ããããã«ã httpd.conf
ãŸãã¯.htaccess
ãã¡ã€ã«ãä»ããŠApacheãµãŒããŒãæ§æããäŸã次ã«ç€ºããŸãã
<FilesMatch "\.html$"> Header set Link "</css/styles.css>; rel=preload; as=style" <FilesMatch>
ããã§ã¯ã FilesMatch
ãã£ã¬ã¯ãã£ãã䜿çšããŠã .html
çµãããã¡ã€ã«ã®ãªã¯ãšã¹ãããã£ã«ã¿ãªã³ã°ããŸãã ãã®åºæºãæºããèŠæ±ãåä¿¡ãããšã Link
ããããŒãå¿çã«è¿œå ãããµãŒããŒã«/css/styles.css
ãªãœãŒã¹ãããã·ã¥ããããæç€ºããŸãã
æ³šïŒ Apache HTTP / 2ã¢ãžã¥ãŒã«ã¯ã H2PushResource
ãã£ã¬ã¯ãã£ãã䜿çšããŠãªãœãŒã¹ããã·ã¥ãéå§ããããšãã§ããŸãã ãã®ãã£ã¬ã¯ãã£ãã®ããã¥ã¡ã³ãã«ã¯ããã®ã¡ãœãããLink
ããããŒã䜿çšãããããæ©ãããã·ã¥ãããªã¬ãŒã§ããããšãèšèŒãããŠããŸãã ç¹å®ã®ã€ã³ã¹ããŒã«ã«ãã£ãŠã¯ããã®æ©èœã«ã¢ã¯ã»ã¹ã§ããªãå ŽåããããŸãã ãã®èšäºã§åŸè¿°ããããã©ãŒãã³ã¹ãã¹ãã§ã¯ã Link
ããããŒã¡ãœããã䜿çšããŸãã
Nginxã¯çŸåšHTTP / 2ãµãŒããŒããã·ã¥ããµããŒãããŠããŸããããããŸã§ã®ãšããããœãããŠã§ã¢å€æŽãªã¹ãã¯ãµããŒãã远å ãããããšã瀺ããŠããŸããã ããã¯ãNginx HTTP / 2ã®å®è£
ãé²åããã«ã€ããŠå€æŽãããå¯èœæ§ããããŸãã
ããã¯ãšã³ãã³ãŒãã§ã®Link
ããããŒã®èšå®
Link
ããããŒãèšå®ããå¥ã®æ¹æ³ã¯ããµãŒããŒèšèªã䜿çšããããšã§ãã ããã¯ãWebãµãŒããŒã®èšå®ã倿Žã§ããªãå Žåã«åœ¹ç«ã¡ãŸãã 以äžã¯ãPHP header
颿°ã䜿çšããŠLink
ããããŒãèšå®ããäŸã§ãã
header("Link: </css/styles.css>; rel=preload; as=style");
ã¢ããªã±ãŒã·ã§ã³ãå
±æãã¹ãã£ã³ã°ã«ããããµãŒããŒèšå®ã倿Žããæ¹æ³ããªãå Žåããã®æ¹æ³ãå¿
èŠã§ãã ãã®ããããŒãä»»æã®ãµãŒããŒèšèªã§èšå®ã§ããã¯ãã§ãã å®è¡æãšã©ãŒã®å¯èœæ§ãåé¿ããããã«ãå¿çæ¬æã®éä¿¡ãéå§ããåã«ãããå¿
ãè¡ã£ãŠãã ããã
è€æ°ã®ãªãœãŒã¹ãããã·ã¥ãã
ãã¹ãŠã®äŸã¯ãåäžã®ãªãœãŒã¹ã®ããã·ã¥ã瀺ããŠããŸãã ããããããã€ããããã·ã¥ãããå Žåã¯ã©ãã§ããããïŒ ãããè¡ãã®ã¯è³¢æã§ãããïŒ çµå±ã®ãšããããããã¯ãŒã¯ãšã¯ã¹ã¿ã€ã«ã·ãŒãã ãã§ã¯ãããŸããã æ¹æ³ã¯æ¬¡ã®ãšããã§ãã
Link: </css/styles.css>; rel=preload; as=style, </js/scripts.js>; rel=preload; as=script, </img/logo.png>; rel=preload; as=image
è€æ°ã®ãªãœãŒã¹ãããã·ã¥ããã«ã¯ãåããã·ã¥ãã£ã¬ã¯ãã£ããã«ã³ãã§åºåãã ãã§ãã ãªãœãŒã¹ãã³ãããã®æ§æã䜿çšããŠLink
ã¿ã°ãä»ããŠè¿œå ããããããããã·ã¥ãã£ã¬ã¯ãã£ããä»ã®ãªãœãŒã¹ãã³ããšæ··åšãããããšãã§ããŸãã preconnect
ãã³ããpreconnect
ãæ··åäŸãpreconnect
ãŸãã
Link: </css/styles.css>; rel=preload; as=style, <https:
è€æ°ã®Link
ããããŒãèš±å¯ãããŸãã HTMLããã¥ã¡ã³ããžã®ãªã¯ãšã¹ãã«è€æ°ã®Link
ããããŒãèšå®ããããã«Apacheãæ§æããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
<FilesMatch "\.html$"> Header add Link "</css/styles.css>; rel=preload; as=style" Header add Link "</js/scripts.js>; rel=preload; as=script" <FilesMatch>
ãã®æ§æã¯ãã³ã³ãã§åºåãããè€æ°ã®å€ãçµåããããã䟿å©ã§ãããæªåããããšã¯ãããŸããã å¯äžã®æ¬ ç¹ã¯ã³ã³ãã¯ããã®æ¬ åŠã§ãããå©äŸ¿æ§ã¯ãããã¯ãŒã¯ãä»ããŠéä¿¡ãããæ°ãã€ãã®äœåãªäŸ¡å€ããããŸãã
ãªãœãŒã¹ãããã·ã¥ããæ¹æ³ãããã£ãã®ã§ããããæ©èœãããã©ããã倿ããæ¹æ³ãèŠãŠã¿ãŸãããã
ãµãŒããŒããã·ã¥ãæ©èœããŠãããã©ããã確èªããæ¹æ³
ããã§ããµãŒããŒã«äœããããã·ã¥ããããã«æç€ºããLink
ããããŒã远å ããŸããã çåãæ®ããŸãããããæ©èœãããã©ããã¯ã©ãããã°ããããŸããïŒ
ãã©ãŠã¶ã«ãã£ãŠç°ãªããŸãã Google Chromeã®æè¿ã®ããŒãžã§ã³ã§ã¯ãããã·ã¥å¯èœãªãªãœãŒã¹ã¯ã[éçºããŒã«]ãŠã£ã³ããŠã®[ãããã¯ãŒã¯]ã¿ãã®[ã€ãã·ãšãŒã¿ãŒ]åã§èå¥ã§ããŸãã

ããã«ãåãã¿ãã§Waterfallåã«ã«ãŒãœã«ãåããããšããªãœãŒã¹ãããã·ã¥ãããæéã«é¢ãã詳现æ
å ±ã衚瀺ãããŸãã

Mozilla Firefoxã®ããŒã«ã¯ãããã·ã¥å¯èœãªãªãœãŒã¹ãå®çŸ©ããäžã§ããŸãæç¢ºã§ã¯ãããŸããã ãã©ãŠã¶éçºè
ããŒã«ã®ãããã¯ãŒã¯ãŠãŒãã£ãªãã£å
ã®ãã®ãããªãªãœãŒã¹ã®ã¹ããŒã¿ã¹ã¯ãç°è²ã®ç¹ã§ããŒã¯ãããŠããŸãã

ãªãœãŒã¹ããµãŒããŒã«ãã£ãŠããã·ã¥ããããã©ããã倿ããæ£ç¢ºãªæ¹æ³ãæ¢ããŠããå Žåã¯ã nghttp
ã³ãã³ãã©ã€ã³ nghttp
ã䜿çšããŠãHTTP / 2ãµãŒããŒããã®å¿çã確èªã§ããŸããæ¬¡ã«äŸã瀺ããŸãã
nghttp -ans https:
ãããã£ãŠããã©ã³ã¶ã¯ã·ã§ã³ã«é¢ä¿ãããªãœãŒã¹ã«é¢ããç°¡åãªæ
å ±ãåãåããŸãã ããã·ã¥ããããªãœãŒã¹ã«ã¯ãããšãã°æ¬¡ã®ããã«ã¢ã¹ã¿ãªã¹ã¯ãä»ããããŸãã
id responseEnd requestStart process code size request path 13 +50.28ms +1.07ms 49.21ms 200 3K / 2 +50.47ms * +42.10ms 8.37ms 200 2K /css/global.css 4 +50.56ms * +42.15ms 8.41ms 200 157 /css/fonts-loaded.css 6 +50.59ms * +42.16ms 8.43ms 200 279 /js/ga.js 8 +50.62ms * +42.17ms 8.44ms 200 243 /js/load-fonts.js 10 +74.29ms * +42.18ms 32.11ms 200 5K /img/global/jeremy.png 17 +87.17ms +50.65ms 36.51ms 200 668 /js/lazyload.js 15 +87.21ms +50.65ms 36.56ms 200 2K /img/global/book-1x.png 19 +87.23ms +50.65ms 36.58ms 200 138 /js/debounce.js 21 +87.25ms +50.65ms 36.60ms 200 240 /js/nav.js 23 +87.27ms +50.65ms 36.62ms 200 302 /js/attach-nav.js
ããã§ãç§ã¯èªåã®ãµã€ãã§nghttp
ã䜿çšãnghttp
ãïŒå°ãªããšãå·çæç¹ã§ã¯ïŒ5ã€ã®ãªãœãŒã¹ãããã·ã¥ããŠããŸããã é¢å¿ã®ãããªãœãŒã¹ã«ã¯ã requestStart
åã®å·ŠåŽã«ã¢ã¹ã¿ãªã¹ã¯ãä»ããŠããŸãã
ãªãœãŒã¹ãããã·ã¥ãããã¿ã€ãã³ã°ã倿ã§ããããã«ãªã£ãã®ã§ããµãŒããŒããã·ã¥ãå®éã®Webãµã€ãã®ããã©ãŒãã³ã¹ã«ã©ã®ããã«åœ±é¿ããããèŠãŠã¿ãŸãããã
ãµãŒããŒããã·ã¥ããã©ãŒãã³ã¹æž¬å®
ããã©ãŒãã³ã¹ã®æ¹åã®å¹æã枬å®ããã«ã¯ãåªãããã¹ãããŒã«ãå¿
èŠã§ãã Sitespeed.ioã¯npmããå
¥æã§ããçŽ æŽãããããŒã«ã§ãã ããŒãžã®ãã¹ããèªååãã貎éãªããã©ãŒãã³ã¹ã¡ããªãã¯ãåéããŸãã
ããã§ãé©åãªããŒã«ãéžæããŸãã-ãã¹ãæ¹æ³è«ã«ç§»ããŸãã
è©Šéšæ¹æ³
ãµãŒããŒããã·ã¥ãWebãµã€ãã®ããã©ãŒãã³ã¹ã«äžãã圱é¿ã枬å®ãããã£ãã®ã§ãã çµæãé¢é£ãããããã«ã6ã€ã®å¥ã
ã®ã·ããªãªã®æ¯èŒãã€ã³ããèšå®ããå¿
èŠããããŸããã ãããã®ã·ããªãªã¯ãHTTP / 2ãŸãã¯HTTP / 1ã䜿çšãã2ã€ã®åŽé¢ã«åãããŠããŸãã HTTP / 2ãµãŒããŒã§ã¯ããµãŒããŒããã·ã¥ã®åœ±é¿ãããŸããŸãªæ¹æ³ã§æž¬å®ããŸãã HTTP / 1ãµãŒããŒã®å Žå-åã蟌ã¿ã«ã¯ãµãŒããŒããã·ã¥ãšã»ãŒåãå©ç¹ãããã¯ããªã®ã§ããªãœãŒã¹ã®åã蟌ã¿ãããã©ãŒãã³ã¹ã«ã©ã®ããã«åœ±é¿ãããã確èªããŸãã
æ€èšäžã®ã·ããªãªïŒ
- HTTP / 2-æ¡åŒµãªã
ãã®ç¶æ
ã§ã¯ããµã€ãã¯HTTP / 2ã§å®è¡ãããŸãããããã·ã¥ããããã®ã¯ãŸã£ãããããŸããã
- HTTP / 2-ããã·ã¥CSS
ãµãŒããŒããã·ã¥ã䜿çšãããŸãããCSSãµã€ãå°çšã§ãã CSSãµã€ãã¯éåžžã«å°ãããéãã¯2 KBãè¶
ããBrotliã¢ã«ãŽãªãºã ã䜿çšããŠå§çž®ãããŠããŸã ã - HTTP / 2-ãã¹ãŠãããã·ã¥
ãµã€ãã®ããŒãžã§äœ¿çšããããã¹ãŠã®ãªãœãŒã¹ãããã·ã¥ã¹ã«ãŒãããŸãã ããã«ã¯ãCSSã6ã€ã®ãã¡ã€ã«ã«æ£åšãã1.4 KBã®JavaScriptã³ãŒããããã³5ã€ã®ãã¡ã€ã«ã«æ£åšãã5.9 KBã®SVGç»åãå«ãŸããŸãã ãã¹ãŠã®ãã¡ã€ã«ãµã€ãºã¯ãå§çž®åŸã«ç€ºãããŸãïŒBrotliã䜿çšïŒã - HTTP / 1-æ¡åŒµãªã
Webãµã€ãã¯HTTP / 1ãããã³ã«ã䜿çšããŠããããªã¯ãšã¹ãã®æ°ãæžãããããã¬ã³ããªã³ã°é床ãäžããããã®ãªãœãŒã¹ã¯çµã¿èŸŒãŸããŠããŸããã - HTTP / 1-ã€ã³ã©ã€ã³CSS
ãã¹ãŠã®CSSãµã€ããåã蟌ãŸããŠããŸãã - HTTP / 1-ãã¹ãŠãã€ã³ã©ã€ã³
Webãµã€ãã®ããŒãžã§äœ¿çšããããã¹ãŠã®ãªãœãŒã¹ãåã蟌ãŸããŠããŸãã CSSãšã¹ã¯ãªããã¯åã蟌ãŸããSVGç»åã¯base64ã§ãšã³ã³ãŒããããããŒã¯ã¢ããã«çŽæ¥åã蟌ãŸããŸãã base64圢åŒã§ãšã³ã³ãŒããããããŒã¿ã¯ããšã³ã³ãŒããããŠããªãåçã®ãã®ãããçŽ1.37å倧ããããšã«æ³šæããŠãã ããã
ã·ããªãªããšã«ã次ã®ã³ãã³ãã§ãã¹ããéå§ããŸããã
sitespeed.io -d 1 -m 1 -n 25 -c cable -b chrome âv https:
ãã®ã³ãã³ãã®æ©èœãç¥ãããå Žåã¯ãããã¥ã¡ã³ããåç
§ããŠãã ãã ã èŠããã«ãåœŒå¥³ã¯æ¬¡ã®æ¡ä»¶ã§https://jeremywagner.meã§ç§ã®ãµã€ãã®ããŒã ããŒãžããã§ãã¯ããŸã ã
- ããŒãžäžã®ãªã³ã¯ã¯ã¹ãã£ã³ããããæå®ãããããŒãžã®ã¿ããã¹ããããŸãã
ããŒãžã¯25åãã¹ããããŸãã - ä¿¡å·åŸåŸ©æéã®28ããªç§ã«å¯Ÿå¿ãããããã¯ãŒã¯ãããã¡ã€ã«ã䜿çšãããçä¿¡é床ã¯5000 kbit / sãçºä¿¡é床ã¯1000 kbit / sã§ãã
- ãã¹ãã¯Google Chromeã䜿çšããŠéå§ãããŸãã
åãã¹ãã«ã€ããŠã3ã€ã®ã€ã³ãžã±ãŒã¿ãåéããã衚瀺ãããŸããã
æåã®å¡è£
æé
ããã¯ãããŒãžããã©ãŠã¶ã«è¡šç€ºããå§ããæç¹ã§ãã ããŒãžãé«éã§ããŒããããŠããããã«èŠããããã«ããã«ã¯ããã®æ°å€ãã§ããã ãå°ããããå¿
èŠããããŸãã
DOMContentLoadedæé
ããã¯ãHTMLããã¥ã¡ã³ããå®å
šã«ããŒãããã³è§£æããããšãã§ãã åæãããJavaScriptã³ãŒãã¯ããŒãµãŒããããã¯ãããã®æ°å€ãå¢ãããŸãã <script>
ã¿ã°ã§async
屿§ã䜿çšãããšãããŒãµãŒã®ãããã¯ãé²ãããšãã§ããŸãã
- ããŒãžèªã¿èŸŒã¿æé
ããã¯ãããŒãžãšãã®ãªãœãŒã¹ãå®å
šã«ããŒãããã®ã«å¿
èŠãªæéã§ãã
ãã¹ããã©ã¡ãŒã¿ã決å®ããããçµæãèŠãŠã¿ãŸãããã
詊éšçµæ
äžèšã®6ã€ã®ã·ããªãªã«åŸã£ãŠãã¹ãã宿œããçµæã®ã°ã©ããäœæããŸããã åã¹ã¯ãªãããããŒãžéå§æéã«ã©ã®ããã«åœ±é¿ããããèŠãŠã¿ãŸãããã

æåã«ãã¹ã±ãžã¥ãŒã«ã®æ§ææ¹æ³ã«ã€ããŠå°ã説æããŸãã éã®ã°ã©ãã®äžéšã¯ãå¹³åæéã«å¯Ÿå¿ããŠããŸãã ãªã¬ã³ãžè²ã®éšåã¯90ïŒ
ã®ã¬ãã«ã§ãã ç°è²ã®éšåã¯æå€§æéã瀺ããŠããŸãã
次ã«ã衚瀺ããããã®ã«é²ã¿ãŸãããã æãé
ãã·ããªãªã¯ãHTTP / 2ããã³HTTP / 1ãæ¹åããã«ãµããŒãããWebãµã€ãã§ãã CSSã«ãµãŒããŒããã·ã¥ã䜿çšãããšããã®ãã¯ãããžãŒã䜿çšããªãå Žåãããå¹³åã§çŽ8ïŒ
é«éã«ãªããHTTP / 1ãµãŒããŒã«CSSãåã蟌ããããçŽ5ïŒ
é«éã«ãªããŸãã
ãã ããèãããããã¹ãŠã®ãªãœãŒã¹ãããã·ã¥ãããšãç»åãå°ãå€ãããŸããããŒãžã衚瀺ããã®ã«ãããæéãå°ãé·ããªããŸãã HTTP / 1ãµãŒããŒã§ã¯ãå¯èœãªãã¹ãŠã®ãã®ãåã蟌ãŸããŠãããããããã©ãŒãã³ã¹ããããã«äœäžããŸãã
çµè«ã¯æããã§ãããµãŒããŒããã·ã¥ã䜿çšãããšãåã蟌ã¿ã䜿çšããHTTP / 1ããããããã«åªããçµæãéæã§ããŸãã ãã ããå€ãã®ãªãœãŒã¹ãããã·ã¥ãŸãã¯åã蟌ããšããªã¿ãŒã³ãæžå°ããŸãã
åããŠãµã€ãã«ã¢ã¯ã»ã¹ãã人ã«ãšã£ãŠããµãŒããŒããã·ã¥ãŸãã¯çµã¿èŸŒã¿ã®ãªãœãŒã¹ã䜿çšããããšã¯ãæ¹åããªããããåªããŠããããšã«æ³šæããŠãã ããã ãŸãããã¹ãã¯ãªãœãŒã¹ã®å°ãªãWebãµã€ãã§å®è¡ãããããããã®ãã¹ãã±ãŒã¹ããµã€ãã§éæå¯èœãªãã®ãå®å
šã«åæ ããŠããªãå¯èœæ§ãããããšã«ãèšåãã䟡å€ããããŸãã
DOMContentLoadedæéã«å¯Ÿããåã¹ã¯ãªããã®å¹æã«ç§»ããŸãããã

ããã§ã®åŸåã¯ã1ã€ã®é¡èãªéžè±ãé€ããŠãåã®ãã£ãŒãã§èŠããã®ãšå€§å·®ãããŸããïŒHTTP / 1ã«ãã¹ãŠã®å¯èœãªãªãœãŒã¹ãåã蟌ãäŸã¯ãããªãäœãDOMContentLoadedæéãäžããŸãã ããã¯ãããããåã蟌ã¿ã«ããããŒãã«å¿
èŠãªãªãœãŒã¹ã®éãæžããããããŒãµãŒãäžæããããšãªãäœæ¥ãç¶è¡ã§ããããã§ãã
æåŸã«ãåã·ããªãªã§ã®ããŒãžã®èªã¿èŸŒã¿æéãã©ã®ããã«å€åããããèŠãŠã¿ãŸãããã

ç§ãã¡ãçºèŠãã以åã®ãã£ãŒãã®åŸåã¯éåžžããã«ä¿åãããŸãã CSSã®ã¿ãããã·ã¥ãããšãããŒãžå
šäœã®ããŒãã§æé«ã®ããã©ãŒãã³ã¹ãåŸãããããšãããããŸããã ããŸãã«ãå€ãã®ãªãœãŒã¹ãããã·ã¥ãããšãå Žåã«ãã£ãŠã¯WebãµãŒããŒãå°ããé
ããªããããšããããŸãããäœãããã·ã¥ããªãããã¯ãŸãã§ãã åã蟌ã¿ãšæ¯èŒããŠããµãŒããŒããã·ã¥ã¯çµæããããããŸããã
ãµãŒããŒããã·ã¥ã®æ³šæ
ãµãŒããŒããã·ã¥ã¯ããµã€ããéå¹ççã«éçšããããã®äžèœè¬ã§ã¯ãããŸããã è¯ãçµæãåŸãã«ã¯ããã®ãã¯ãããžãŒãè³¢ã䜿çšããå¿
èŠããããŸãã ãããŠãããã«ããã€ãã®éèŠãªãã€ã³ãããããŸãã
ããã·ã¥ã§ãããªãœãŒã¹ãå€ããã
äžèšã®ã·ããªãªã®1ã€ã§ã¯ãå€ãã®ãªãœãŒã¹ãããã·ã¥ããŸããããããã¯ãã¹ãŠåèšããŒã¿ã®ããäžéšãå ããŠããŸãã ãã©ãŠã¶ãŒã¯HTMLã ãã§ãªãã䞊è¡ããŠããŒããããä»ã®ãã¹ãŠã®ãªãœãŒã¹ãããŒãããå¿
èŠãããããã倿°ã®éåžžã«å€§ããªãªãœãŒã¹ãããã·ã¥ãããšãããŒãžã®è¡šç€ºãããã«é
å»¶ããå¯èœæ§ããããŸãã ããã·ã¥ãããã®ãéžæããããšãæåã§ãã ã¹ã¿ã€ã«ã·ãŒãïŒãããŸã§ã®ãšããããã»ã©å€§èŠæš¡ã§ã¯ãããŸããïŒã¯ãæåã«éžæããã®ã«é©ããŠããŸãã æ¬¡ã«ãä»ã«ããã·ã¥ããæå³ããããã®ãè©äŸ¡ããŸãã
çŸåšã®ããŒãžã«é¢ä¿ã®ãªããªãœãŒã¹ãããã·ã¥ã§ããŸãã
ç¹ã«èšªåè
ã®åæãããå Žåãããã¯å¿
ãããæªãããšã§ã¯ãããŸããã è¯ãäŸã¯ãç»é²ããã»ã¹ã®é²è¡äžã«æ¬¡ã®ããŒãžã®ãªãœãŒã¹ãããã·ã¥ããè€æ°ããŒãžã®ç»é²ãã©ãŒã ã§ãã ãã ããåæããŸãããã蚪åè
ããŸã é²èЧããŠããªãããŒãžã®ãªãœãŒã¹ã匷å¶ããå¿
èŠããããã©ããããããªãå Žåã¯ãããªãã§ãã ããã äžéšã®ãŠãŒã¶ãŒã¯ãéãããéã®ãã©ãã£ãã¯ã§é¢çšã䜿çšããå¯èœæ§ããããæŠç¥ã«ãã£ãŠå®éã®è²»çšããããå ŽåããããŸãã
HTTP / 2ãµãŒããŒãæ£ããæ§æãã
äžéšã®ãµãŒããŒã«ã¯ããµãŒããŒããã·ã¥ã«é¢é£ããå€ãã®æ§æãªãã·ã§ã³ããããŸãã ãã®mod_http2
ãApacheã®mod_http2
ã¯ããªãœãŒã¹ããã·ã¥ãèšå®ããããã®ãªãã·ã§ã³ãããã€ããããŸãã H2PushPriority
ãã©ã¡ãŒã¿ãŒã¯ç¹ã«è峿·±ããã®ã§ãããç§ã®ãµãŒããŒã®å Žåã¯ããã©ã«ãã§æ®ããŸããã äžéšã®å®éšã§ã¯ãããã©ãŒãã³ã¹ãããã«åäžããŸãã åWebãµãŒããŒã«ã¯ãå®éšã«äœ¿çšã§ããã¹ã€ãããšèšå®ã®ã»ããããã¹ãŠæã£ãŠããã®ã§ãããã¥ã¢ã«ãæ³šææ·±ãèªãã§ãå©çšå¯èœãªãã®ãèŠã€ããŠãã ããã
ããã·ã¥ããããªãœãŒã¹ã¯ãã£ãã·ã¥ããã«æ®ãããšãã§ããŸã
, Server Push - , . , . mod_http2
Apache, , H2PushDiarySize
, H2O , cookie .
H2O-, - -, cookie. , , , CSS-Tricks . , RST_STREAM
, , . .
HTTP/2? , Server Push.
- , . : , - . CSS . , , . , , .
Server Push , H2O, , cookies. , . , , .
Server Push , :
. Yoav Weiss , as
( , ), . , preload
â , Server Push.
HTTP/2 Server Push. «- » .