TTFBãšCPUã®è² è·ãæžããããã«ã pages > 50KB
ïŒæ¶ç©ºã®ã¹ããªãŒã ãªãŒããŒãããïŒã
streamAsString
ã streamAsStaticMarkup
ã streamQueueAsString
ã streamQueueAsStaticMarkup
ããŸãã 1.2.1ã®æç¹ã§ãã¹ããªãŒã ã¬ã³ãã©ãŒã¯å®éšçãªãã®ã§ããã renderToString
ããã10ã15ïŒ
é
ããªã£ãŠããŸãã 1.3ïŒçŸåšã¯RC3 ïŒãåŸ
ã€å¿
èŠããããŸããrenderToString
ãšrenderToStaticMarkup
ã眮ãæããaickin / react-dom-streamã§renderToStream
䜿çšããïŒSSR / renderToStream.jsïŒ ãhttps://github.com/zeit/next.js/pull/767ã«åã£ãŠä»£ãã
èšåãã1ã€ã®ããš..
å®è¡ããäœæ¥éã¯åãã§ãããããã¹ããªãŒã ã¬ã³ããªã³ã°ã§ã¯ãéåžžãCPUã®æ¹åã¯ããã»ã©å€ããããŸããã ãã ããå¿çæéã¯ççž®ãããŸãã
SSRã¬ã³ããªã³ã°ã·ã¹ãã ãã«ã¹ã¿ãã€ãºããæ¹æ³ãæäŸããããšã¯ããªãè¯ãèãã§ãã ããããä»ã®ãšãããããã©ã«ãã§ã¯Reactã®renderToStringïŒïŒã¡ãœããã䜿çšãããšæããŸãã
ããã¯ã2.0以éã«ã§ããããšã§ãã
å®è¡ããäœæ¥éã¯åãã§ãããããã¹ããªãŒã ã¬ã³ããªã³ã°ã§ã¯ãéåžžãCPUã®æ¹åã¯ããã»ã©å€ããããŸããã
_aickin / react-dom-streamãã_
ReactDOM.renderToStringãžã®1åã®åŒã³åºãã¯ãCPUãæ¯é ããä»ã®èŠæ±ãæ¯æžãããå¯èœæ§ããããŸãã ããã¯ãå°ããããŒãžãšå€§ããããŒãžãæ··åšãããµãŒããŒã§ç¹ã«åä»ã§ãã
ã¹ããªãŒãã³ã°ã¯ãéåæãšéšåçãªäž¡æ¹ãè¡ãããšã§ã倧ããªããŒãžã®ã¡ã¢ãªå²ãåœãŠãšCPU䜿çšçãå€§å¹ ã«åæžããŸãããïŒ
ããã¯åãç·ã«æ²¿ã£ãŠãããšæããŸããã 誰ããhttps://github.com/FormidableLabs/rapscallionãè©ŠããŸãããïŒ
ã¹ããªãŒãã³ã°ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸãããããã¯ã©ã€ã¢ã³ããžã®ã³ã³ãã³ãã®éä¿¡ãããã«éå§ã§ããŸãã
ããã¥ã¡ã³ãã®ä»ã®æ©èœïŒ
- ã¬ã³ããªã³ã°ã¯éåæã§éããããã³ã°ã§ãã
- Rapscallionã¯ãrenderToStringãããçŽ50ïŒ é«éã§ãã
- ã¹ããªãŒãã³ã°ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸãããããã¯ã©ã€ã¢ã³ããžã®ã³ã³ãã³ãã®éä¿¡ãããã«éå§ã§ããŸãã
- ãã³ãã¬ãŒãæ©èœãæäŸãããããã¹ããªãŒãã³ã°ã®ã¡ãªãããæŸæ£ããããšãªããã³ã³ããŒãã³ãã®HTMLãå®åæã§ã©ããã§ããŸãã
- ã¬ã³ããªã³ã°ãããã«é«éåããããã®ã³ã³ããŒãã³ããã£ãã·ã³ã°APIãæäŸããŸãã
ïŒ2279ã«Rapscallionã®äŸãè¿œå ããŸãã... Rapscallion + Nextãéåžžèã§ããããšã確èªã§ããŸãã ã¹ããªãŒãã³ã°/ãããã¹ããŒã¹ã®ã¬ã³ããªã³ã°ã¯çŽ æŽãããã§ãããã³ã³ããŒãã³ãã¬ãã«ã®ãã£ãã·ã³ã°ã¯ç§ãã¡ã«ãšã£ãŠã²ãŒã ãã§ã³ãžã£ãŒã§ã...ïŒgodmodeïŒ
React 16ã«ã¯ç¬èªã®renderToNodeStream
ãããã®ã§ãnext.jsãrenderToString
代ããã«ããã䜿çšãããªãã·ã§ã³ãè¿œå ããããšã¯å€§ããªå©ç¹ã«ãªããŸãã @timneutkensãã©ãæããŸããïŒ
ãã§ã«è¿œå ãããã®ã®ãªã¹ãã«ãããŸãð
ããã«ã€ããŠäœããã¥ãŒã¹ã¯ãããŸããïŒ
é£çµ¡ãã£ãïŒ
Next.jsã¯ããŠãŒã¶ãŒãã«ã¹ã¿ã ã®éåæã¬ã³ãã©ãŒã䜿çšã§ããããã«ãã«ã¹ã¿ã ã®render
ïŒããã©ã«ãã®ã¬ã³ãã©ãŒãšããŠrenderToString
ã䜿çšïŒãå
¬éããå¿
èŠããããŸãã
ãã®æ©èœããªããããéåæã¬ã³ãã©ãŒã䜿çšããããã«razzle
ã䜿çšããå¿
èŠããããŸããïŒïŒïŒãã®DXã¯NextJSã«ã¯ã»ã©é ãã§ãããç¶è¡ããã«ã¯ãããåãå
¥ããå¿
èŠããããŸããïŒã
Next.jsã®ãã¹ãŠã倧奜ãã§ããã次ã®2ã€ããããŸãã
ã¹ããªãŒãã³ã°ã¬ã³ããªã³ã°ãµããŒãã®ããŒãããã/èšç»ã¯ãããŸããïŒ ãããã£ãŠãnext.jsã«ããããããšäºæ³ãããŸãã
ReactFizzãå®è£ ããReactããŒã /ãã®èšç»ã¯ä¿çäžã§ãã
@timneutkensäœã®åé¡ãããã§è¿œè·¡ããPRïŒ
2019幎8æ8æ¥ã«å
¬éãããFacebookã®ããã°æçš¿ãã
https://reactjs.org/blog/2019/08/08/react-v16.9.0.html
ãµãŒããŒã¬ã³ããªã³ã°ã«é¢ããææ°æ å ±
æ°ãããµã¹ãã³ã¹å¯Ÿå¿ãµãŒããŒã¬ã³ãã©ãŒã®äœæ¥ãéå§ããŸãããã䞊è¡ã¢ãŒãã®åæãªãªãŒã¹ã®æºåãã§ããŠãããšã¯æåŸ ããŠããŸããã ãã ãããã®ãªãªãŒã¹ã§ã¯ãæ¢åã®ãµãŒããŒã¬ã³ãã©ãŒããµã¹ãã³ã¹ãã©ãŒã«ããã¯çšã®HTMLãããã«çºè¡ããã¯ã©ã€ã¢ã³ãã§å®éã®ã³ã³ãã³ããã¬ã³ããªã³ã°ã§ããããã«ããäžæçãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã ããã¯ãã¹ããªãŒãã³ã°ã¬ã³ãã©ãŒã®æºåãæŽããŸã§Facebookã§çŸåšäœ¿çšããŠãããœãªã¥ãŒã·ã§ã³ã§ãã
ãµãŒããŒã¹ããªãŒãã³ã°ã®ãµããŒãããŸã åŸ ã£ãŠãã人ã®ããã«:)
next.jsã«renderToNodeStreamãå®è£ ããããã®æŽæ°ããã®ä»ã®æ¹æ³ã¯ãããŸããïŒ
æŽæ°ã¯ãããŸããïŒ
<3
ãã¹ãŠã®ã¢ããããŒãïŒ
@StarpTechç§ã¯ãããå°ã調ã¹ãŸããïŒãã®æ©èœã«ãèå³ããããŸãïŒïŒãããŠãreactããŒã ã¯react-flightãšåŒã°ãããã®ã«åãçµãã§ããããã§ããããã¯ããããç§ãã¡ãããã§åŸ ã£ãŠããã¹ããªãŒãã³ã°ãœãªã¥ãŒã·ã§ã³ã®ããŒã¹ã«ãªãã§ããã:)
åå¿é£è¡ïŒ
ããã¯ãã«ã¹ã¿ã Reactã¹ããªãŒãã³ã°ã¢ãã«ã䜿çšããããã®å®éšçãªããã±ãŒãžã§ãã
ç§ã解éãããå
éšã®ä»çµã¿ã«å
ãåœãŠãé¢é£ããPRïŒãã®ãããã®å°é家ã§ããããŸããðïŒ
ïŒ17285 ïŒãã©ã€ãã®åºæ¬APIããµãŒããŒã¯ãã¹ãŠãæååãšããŠã¹ããªãŒãã³ã°ã§ããå¿
èŠããããŸããããµãŒããŒäžã§éåæçã«è§£æ±ºããããã£ã³ã¯ã®ãã¬ãŒã¹ãã«ããŒã¯æ®ããŠãããŸãã ã¹ããªãŒã ããreactãå®éã«è¡šãããŒã¿åãç¥ãæ¹æ³ã«ã€ããŠã®äžå®å
šã§ããèå³æ·±ãæ§æã¯ãããã«ãããŸãã
ïŒ17398æè¿ã®PRã§ã¯ããã£ã³ã¯çšã®APIãè¿œå ãããŠãããããïŒéãè¯ããã°ïŒãã®éšåãèªåã§è©Šãããšãã§ããŸãã ãã¹ãŠãã©ã®ããã«ãŸãšãããããã¯ããããŸããããããã§ãããã®ãã¹ãŠã®äœæ¥ãè¡ãããŠããã®ãèŠãã®ã¯ã¡ãã£ãšå¬ããã§ã:)
_ããã¯å°ã話é¡ããå€ããŠãããããããŸãããããã®åé¡ã賌èªããŠãã人ã ã«ãšã£ãŠããŸãããã°èå³æ·±ãã§ãïŒïŒ_
@pepfæ å ±ãããããšãïŒ
ããŒãã ã¿ããªããããšããé¢çœãæ å ±ã NextJSããstreamAsStringã䜿çšããã ãã§ãªããReactããµã¹ãã³ã¹ãªã©ã®SSRããµããŒãããã®ãåŸ ã€å¿ èŠãããã®ã¯ãªãã ãããšèããŠããŸãã
@arunodaããã«ãããã¡ã¢ãªæ¶è²»éãåæžããããšæããŸããããã¯ãäœã¡ã¢ãªã®ã©ã ãé¢æ°ãCloudflareã¯ãŒã«ãŒã«ãšã£ãŠéåžžã«éèŠã§ãã
ããã«ã€ããŠäœããã¥ãŒã¹ã¯ãããŸããïŒ
é£çµ¡ãã£ãïŒ
ãã¥ãŒã¹ã®äººã¯ããŸããïŒ ïŒP
åå¿ãµã¹ãã³ã¹ã¯æ±ºããŠåºãŠããªããããããªããšæããŠããã®ã§ããããåèããæ¹æ³ã¯ãããŸããïŒ ããªãäžè¬çãªã³ã³ãã³ãã®å°ãªãããŒãžïŒvercelã®ãµãŒããŒã¬ã¹é¢æ°ããã¬ã³ããªã³ã°ãããïŒã§800ã1000ããªç§ã®åæã¬ã³ããªã³ã°æéã衚瀺ãããŸãã çè«çã«ã¯ãHTMLãã¹ããªãŒãã³ã°ãããšãæåã®é£çµ¡å ãå¢ããæåã®èªã¿èŸŒã¿ã®UXãã¯ããã«éãèªèãããå¯èœæ§ããããŸãã
ããã¯NextJSã§ã¯ãªãVercelã®å¶éã§ããïŒ Vercelã¯Lambdaãšåãçš®é¡ã®ã³ãŒã«ãã¹ã¿ãŒãã¢ããã®ç ç²ã«ãªããŸããïŒ ç§ã®ããŒã ã¯å€§éã®ã³ã³ãã³ãã®å€ããµã€ããéå¶ããŠããããªã¯ãšã¹ãå šäœã®ã¿ã€ãã³ã°ã¯50ããªç§æªæºã§ãã ããã§ã¯ãã¹ããªãŒãã³ã°ãç¹å¹è¬ã«ãªããšã¯æããŸããã
ç¹å¹è¬ã«ãªããšã¯æããŸãããã確ãã«æè¿ãã¹ãæ¹åã§ãã
50msã¯ãããããã«èãããåè¿°ã®ã³ãŒã«ãã¹ã¿ãŒãæéãšæ¯èŒããŠæé©åããã«ã¯æ¯èŒçéèŠã§ã¯ãããŸããããCloudflareã¯ãŒã«ãŒã®ãããªãšããžã§ã¬ã³ããªã³ã°ããå Žåã¯ããã§ã¯ãããŸããïŒæãè¿ãCloudflareãšããžã®å Žæãžã®pingãšåãããå°ãªããšãååã§ãïŒãCloudflareã¯ãŒã«ãŒã¯ãã³ãŒã«ãã¹ã¿ãŒãæã«ãéåžž5ããªç§æªæºã§éåžžã«è¿
éã«å¿çããŸãã 察ç
§çã«ãLambdaé¢æ°ãšLambda @ Edgeé¢æ°ã¯ã©ã¡ãããã³ãŒã«ãã¹ã¿ãŒãããå¿çããã®ã«1ç§ä»¥äžãããå ŽåããããŸãã
ããã¯ãnext.jsã®éçºè
ããããåªå
ããããã«æ¡çšããVarcelïŒç¬èªã®cdnãæ§ç¯ããïŒã«ãšã£ãŠããè¯ãã±ãŒã¹ã«ã¯ãªããªãããšãç§ã¯ç¥ã£ãŠããŸãã
人ã ãnext.jsãcloudflareã¯ãŒã«ãŒã«æ£åžžã«ãããã€ããããã¥ã¡ã³ãããªããžããªã¯ãããŸããïŒ ã°ãŒã°ã«ãããŠã¿ãŸããããããŸãèŠã€ãããŸããã§ããã ããã¯çŽ æŽãããã§ãããã
ç§ã®é»è©±ããéä¿¡ãããŸãã
2020幎7æ5æ¥ã«ã¯ã17:47ã§ããŠã£ã¹ã³ã³ã·ã³å·[email protected]æžããŸããïŒ
ã
50msã¯éåžžã«äœããåè¿°ã®ã³ãŒã«ãã¹ã¿ãŒãæéãšæ¯èŒããŠæé©åããã®ã¯æ¯èŒçéèŠã§ã¯ãããŸããããCloudflareã¯ãŒã«ãŒã®ãããªãšããžã§ã¬ã³ããªã³ã°ããå Žåã¯50msãå€ããªããŸãïŒæãè¿ãCloudflareãšããžã®å Žæãžã®pingãšåãããå°ãªããšãååïŒãCloudflareã¯ãŒã«ãŒã¯ãã³ãŒã«ãã¹ã¿ãŒãæã«ãéåžž5ããªç§æªæºã§éåžžã«è¿ éã«å¿çããŸãã å¯Ÿç §çã«ãLambdaé¢æ°ãšLambda @ Edgeé¢æ°ã¯ã©ã¡ãããã³ãŒã«ãã¹ã¿ãŒãããå¿çããã®ã«1ç§ä»¥äžãããå ŽåããããŸãã
ããã¯ãnext.jsã®éçºè ããããåªå ããããã«æ¡çšããVarcelïŒç¬èªã®cdnãæ§ç¯ããïŒã«ãšã£ãŠããè¯ãã±ãŒã¹ã«ã¯ãªããªãããšãç§ã¯ç¥ã£ãŠããŸããâ
ã³ã¡ã³ãããã®ã§ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããããç»é²ã解é€ããŠãã ããã
50msã¯ãããããã«èãããåè¿°ã®ã³ãŒã«ãã¹ã¿ãŒãæéãšæ¯èŒããŠæé©åããã«ã¯æ¯èŒçéèŠã§ã¯ãããŸãã
æ確ã«ããããã«ãç§ã¯50ããªç§ã®å¿çæéã«ã€ããŠäžå¹³ãèšã£ãŠããŸããã§ãã-NextJSã®SRRã¯ãã³ã³ãã³ãã®å€ãããŒãžã«å¯ŸããŠ1åããã3kãªã¯ãšã¹ãã®åã§ãæ¯èŒçããã©ãŒãã³ã¹ãé«ããããSwitzã®åé¡ã¯ä»ã®å Žæã«ããå¯èœæ§ãããããšãææããŸããã
人ã ãnext.jsãcloudflareã¯ãŒã«ãŒã«æ£åžžã«ãããã€ããããã¥ã¡ã³ãããªããžããªã¯ãããŸããïŒ
ç§ãããã«èå³ããããŸãã çŸåšFargateã§å®è¡ããŠããŸãããã¢ããªããšããžã«ããã·ã¥ããããšã次ã®è«ççãªã¹ãããã«ãªããŸãã
HTMLå ã§å¯èœãªéãã®æ¹åãè¡ããŸãããããµãŒããŒã®å¿çæéã¯éåžžã«é·ããªã£ãŠããŸãã :(
@hugglerãã®äŸãcacheable-responseãšçµã¿åãããããšãã§ããŸãã RedisïŒãŸãã¯ã¡ã¢ãªå ãã£ãã·ã¥ãªã©ïŒã䜿çšããŠãhtmlããã£ãã·ã¥ã«ä¿åã§ããŸãã ãµãŒããŒã®å¿çæéãæ¹åããŸãã
人ã ãnext.jsãcloudflareã¯ãŒã«ãŒã«æ£åžžã«ãããã€ããããã¥ã¡ã³ãããªããžããªã¯ãããŸããïŒ ã°ãŒã°ã«ãããŠã¿ãŸããããããŸãèŠã€ãããŸããã§ããã ããã¯çŽ æŽãããã§ãããã
@switz @ tills13 https://fab.dev/ããã§ãã¯ããŸãããïŒ 2020幎åé ã«è©ŠããŠã¿ãŸãããããã¬ãªãªãŒã¹ç¶æ ã§ããããããªãé ããšããã«æ¥ãŠããããã§ãã ããããåãæ»ãå¶éã®1ã€ã¯Cloudflareèªäœã§ããããç¶æ³ã¯ä»ã§ã¯å€ãã£ãŠããå¯èœæ§ããããŸãã
ãã°ããèŠãŠããªãã åè©äŸ¡ããå¿ èŠããããŸãã ååèŠããšããããªãæ·±å»ãªãã¬ãŒããªãããããŸããã
https://github.com/flareact/flareactã«ã泚ç®ããŠã
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ
æãåèã«ãªãã³ã¡ã³ã
ããã«ã€ããŠäœããã¥ãŒã¹ã¯ãããŸããïŒ