Reactã®ã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã解説ããã¬ãŒã ããããã®åé¡ãç¹å®ã»è§£æ±ºããã¹ã ãŒãºãªUXãå®çŸããããã®ã¢ããªã±ãŒã·ã§ã³æé©åææ³ãåŠã³ãŸãã
Reactã®ã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ïŒæé©ãªããã©ãŒãã³ã¹ã®ããã®ãã¬ãŒã ããããã®çè§£ãšè»œæžç
Reactã®ã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãšäœæããã©ãŒãã³ã¹ãåäžãããããã«èšèšããã匷åãªæ©èœã§ããããã«ãããReactã¯ã¡ã€ã³ã¹ã¬ããããããã¯ããããšãªãè€æ°ã®ã¿ã¹ã¯ã䞊è¡ããŠåŠçã§ããããã¹ã ãŒãºãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸããŸããããããã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã䜿çšããŠããã¢ããªã±ãŒã·ã§ã³ã§ãã¬ãŒã ãããããçºçããã¢ãã¡ãŒã·ã§ã³ã®ã«ã¯ã€ããã€ã³ã¿ã©ã¯ã·ã§ã³ã®é å»¶ãå šäœçã«è³ªã®äœããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªããããšããããŸãããã®èšäºã§ã¯ãReactã®ã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã®è€éãªä»çµã¿ãæãäžãããã¬ãŒã ããããã®åå ãæ¢ãããããã®åé¡ãç¹å®ããŠè»œæžããããã®å®è·µçãªæŠç¥ãæäŸããã°ããŒãã«ãªãŠãŒã¶ãŒã«ãšã£ãŠæé©ãªããã©ãŒãã³ã¹ã確ä¿ããŸãã
Reactã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã®çè§£
åŸæ¥ã®Reactã®ã¬ã³ããªã³ã°ã¯åæçã«åäœããŸããã€ãŸããã³ã³ããŒãã³ããæŽæ°ãããå¿ èŠãããå Žåãã¬ã³ããªã³ã°ããã»ã¹å šäœãå®äºãããŸã§ã¡ã€ã³ã¹ã¬ããããããã¯ããŸããããã¯ãç¹ã«å€§èŠæš¡ãªã³ã³ããŒãã³ãããªãŒãæã€è€éãªã¢ããªã±ãŒã·ã§ã³ã«ãããŠãé å»¶ãç¡å¿çã®åå ãšãªãå¯èœæ§ããããŸããReact 18ã§å°å ¥ãããã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã¯ãã¬ã³ããªã³ã°ãããå°ããäžæå¯èœãªã¿ã¹ã¯ã«åå²ããããšã§ãããå¹ççãªã¢ãããŒããæäŸããŸãã
äž»èŠãªæŠå¿µ
- ã¿ã€ã ã¹ã©ã€ã·ã³ã°ïŒ Reactã¯ã¬ã³ããªã³ã°äœæ¥ãå°ããªãã£ã³ã¯ã«åå²ããåãã£ã³ã¯ã®åŸã«ãã©ãŠã¶ã«å¶åŸ¡ãæ»ãããšãã§ããŸããããã«ããããã©ãŠã¶ã¯ãŠãŒã¶ãŒå ¥åãã¢ãã¡ãŒã·ã§ã³ã®æŽæ°ãªã©ãä»ã®ã¿ã¹ã¯ãåŠçã§ããUIã®ããªãŒãºãé²ããŸãã
- äžæïŒ Reactã¯ããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãªã©ãããåªå 床ã®é«ãã¿ã¹ã¯ãåŠçããå¿ èŠãããå Žåãé²è¡äžã®ã¬ã³ããªã³ã°ããã»ã¹ãäžæã§ããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«å¯ŸããŠå¿çæ§ãç¶æããããšãä¿èšŒãããŸãã
- ãµã¹ãã³ã¹ïŒ ãµã¹ãã³ã¹ã«ãããã³ã³ããŒãã³ãã¯ããŒã¿ã®ããŒããåŸ ã£ãŠããéãã¬ã³ããªã³ã°ããäžæãã§ããŸããReactã¯ããŒã¿ãå©çšå¯èœã«ãªããŸã§ãããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒãªã©ã®ãã©ãŒã«ããã¯UIã衚瀺ã§ããŸããããã«ãããããŒã¿åŸ æ©äžã«UIããããã¯ãããã®ãé²ããäœæããã©ãŒãã³ã¹ãåäžãããŸãã
- ãã©ã³ãžã·ã§ã³ïŒ ãã©ã³ãžã·ã§ã³ã«ãããéçºè ã¯ç¹å®ã®æŽæ°ãç·æ¥åºŠãäœããã®ãšããŠããŒã¯ã§ããŸããReactã¯ãã©ã³ãžã·ã§ã³ãããç·æ¥ã®æŽæ°ïŒçŽæ¥çãªãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãªã©ïŒãåªå ããã¢ããªã®å¿çæ§ãç¶æããŸãã
ãããã®æ©èœã¯éåçã«ãç¹ã«é »ç¹ãªæŽæ°ãšè€éãªUIãæã€ã¢ããªã±ãŒã·ã§ã³ã«ãããŠãããæµåçã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«è²¢ç®ããŸãã
ãã¬ãŒã ãããããšã¯äœãïŒ
ãã¬ãŒã ããããã¯ããã©ãŠã¶ããã¬ãŒã ãæãŸãããã¬ãŒã ã¬ãŒãïŒéåžžã¯æ¯ç§60ãã¬ãŒã ïŒFPSïŒä»¥äžïŒã§ã¬ã³ããªã³ã°ã§ããªãå Žåã«çºçããŸããããã«ãããç®ã«èŠããã«ã¯ã€ããé å»¶ããããŠå šäœçã«äžå¿«ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãçããŸããåãã¬ãŒã ã¯ãç¹å®ã®æç¹ã§ã®UIã®ã¹ãããã·ã§ããã衚ããŸãããã©ãŠã¶ãç»é¢ãååã«éãæŽæ°ã§ããªãå Žåããã¬ãŒã ãã¹ããããããããã®èŠèŠçãªäžå®å šãã«ã€ãªãããŸãã
60 FPSãšããç®æšãã¬ãŒã ã¬ãŒãã¯ããã¬ãŒã ãããçŽ16.67ããªç§ã®ã¬ã³ããªã³ã°ããžã§ããã«çžåœããŸãããã©ãŠã¶ã1ãã¬ãŒã ãã¬ã³ããªã³ã°ããã®ã«ãã以äžã®æéãããããšããã¬ãŒã ããããããããŸãã
Reactã¢ããªã±ãŒã·ã§ã³ã«ããããã¬ãŒã ããããã®åå
ã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã䜿çšããŠããŠããReactã¢ããªã±ãŒã·ã§ã³ã§ãã¬ãŒã ããããã«å¯äžããå¯èœæ§ã®ããããã€ãã®èŠå ããããŸãïŒ
- è€éãªã³ã³ããŒãã³ãã®æŽæ°ïŒ å€§èŠæš¡ã§è€éãªã³ã³ããŒãã³ãããªãŒã¯ãã¬ã³ããªã³ã°ã«ããªãã®æéãããããå©çšå¯èœãªãã¬ãŒã ããžã§ãããè¶ ããå¯èœæ§ããããŸãã
- é«ã³ã¹ããªèšç®ïŒ ã¬ã³ããªã³ã°ããã»ã¹å ã§è€éãªããŒã¿å€æãç»ååŠçãªã©ã®èšç®éçŽçãªã¿ã¹ã¯ãå®è¡ãããšãã¡ã€ã³ã¹ã¬ããããããã¯ãããå¯èœæ§ããããŸãã
- æé©åãããŠããªãDOMæäœïŒ é »ç¹ãŸãã¯éå¹çãªDOMæäœã¯ãããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ãªãå¯èœæ§ããããŸããReactã®ã¬ã³ããªã³ã°ãµã€ã¯ã«å€ã§DOMãçŽæ¥æäœããããšããäžæŽåãããã©ãŒãã³ã¹ã®åé¡ã«ã€ãªããå¯èœæ§ããããŸãã
- éå°ãªåã¬ã³ããªã³ã°ïŒ äžèŠãªã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ã¯ã远å ã®ã¬ã³ããªã³ã°äœæ¥ãåŒãèµ·ããããã¬ãŒã ããããã®å¯èœæ§ãé«ããŸããããã¯ãã°ãã°ã`React.memo`ã`useMemo`ã`useCallback`ã®äžé©åãªäœ¿çšãã`useEffect`ããã¯ã®äŸåé åãæ£ãããªãããšãåå ã§ãã
- ã¡ã€ã³ã¹ã¬ããã§ã®é·æéå®è¡ã¿ã¹ã¯ïŒ ãããã¯ãŒã¯ãªã¯ãšã¹ããåææäœãªã©ãã¡ã€ã³ã¹ã¬ãããé·æéãããã¯ããJavaScriptã³ãŒãã¯ããã©ãŠã¶ããã¬ãŒã ãèŠéãåå ãšãªããŸãã
- ãµãŒãããŒãã£ã©ã€ãã©ãªïŒ éå¹çãŸãã¯æé©åãäžååãªãµãŒãããŒãã£ã©ã€ãã©ãªã¯ãããã©ãŒãã³ã¹ã®ããã«ããã¯ãçã¿åºãããã¬ãŒã ããããã®äžå ãšãªãå¯èœæ§ããããŸãã
- ãã©ãŠã¶ã®å¶éïŒ éå¹çãªã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãé ãCSSèšç®ãªã©ãç¹å®ã®ãã©ãŠã¶æ©èœãå¶éãã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸããããã¯ãã©ãŠã¶ãããã€ã¹ã«ãã£ãŠç°ãªãå ŽåããããŸãã
- ããã€ã¹ã®å¶éïŒ ã¢ããªã±ãŒã·ã§ã³ã¯ãã€ãšã³ãããã€ã¹ã§ã¯å®ç§ã«åäœãããããããŸããããå€ããŸãã¯æ§èœã®äœãããã€ã¹ã§ã¯ãã¬ãŒã ããããã«æ©ãŸãããããšããããŸããããŸããŸãªããã€ã¹ã®èœåã«åãããŠæé©åããããšãæ€èšããŠãã ããã
ãã¬ãŒã ããããã®ç¹å®ïŒããŒã«ãšãã¯ããã¯
ãã¬ãŒã ããããã«å¯ŸåŠããæåã®ã¹ãããã¯ããã®ååšãç¹å®ããæ ¹æ¬åå ãçè§£ããããšã§ããããã«ã¯ããã€ãã®ããŒã«ãšãã¯ããã¯ã圹ç«ã¡ãŸãïŒ
Reactãããã¡ã€ã©
React DevToolsã§å©çšå¯èœãªReactãããã¡ã€ã©ã¯ãReactã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ãåæããããã®åŒ·åãªããŒã«ã§ããã¬ã³ããªã³ã°ã®ããã©ãŒãã³ã¹ãèšé²ããã¬ã³ããªã³ã°ã«æãæéãããã£ãŠããã³ã³ããŒãã³ããç¹å®ããããšãã§ããŸãã
Reactãããã¡ã€ã©ã®äœ¿ç𿹿³ïŒ
- ãã©ãŠã¶ã§React DevToolsãéããŸãã
- ãProfilerãã¿ããéžæããŸãã
- ãRecordããã¿ã³ãã¯ãªãã¯ããŠãããã¡ã€ãªã³ã°ãéå§ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãæäœããŠãåæãããã¬ã³ããªã³ã°ããã»ã¹ãããªã¬ãŒããŸãã
- ãStopããã¿ã³ãã¯ãªãã¯ããŠãããã¡ã€ãªã³ã°ã忢ããŸãã
- èšé²ãããããŒã¿ãåæããŠãããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããŸãããrankedããã¥ãŒãšãflamegraphããã¥ãŒã«æ³šæããŠãã ããã
ãã©ãŠã¶éçºè ããŒã«
ãã©ãŠã¶éçºè ããŒã«ã¯ãWebããã©ãŒãã³ã¹ãåæããããã®ããŸããŸãªæ©èœãæäŸããŸããããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- Performanceã¿ãïŒ Performanceã¿ãã§ã¯ãã¬ã³ããªã³ã°ãã¹ã¯ãªããã£ã³ã°ããããã¯ãŒã¯ãªã¯ãšã¹ããªã©ããã©ãŠã¶ã®ã¢ã¯ãã£ããã£ã®ã¿ã€ã ã©ã€ã³ãèšé²ã§ããŸããããã¯ãReactèªäœã®å€éšã«ããé·æéå®è¡ã¿ã¹ã¯ãããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
- ãã¬ãŒã /ç§ïŒFPSïŒã¡ãŒã¿ãŒïŒ FPSã¡ãŒã¿ãŒã¯ããã¬ãŒã ã¬ãŒãããªã¢ã«ã¿ã€ã ã§è¡šç€ºããŸããFPSã®äœäžã¯ãæœåšçãªãã¬ãŒã ããããã瀺ããŸãã
- Renderingã¿ãïŒ Renderingã¿ãïŒChrome DevToolså ïŒã§ã¯ãåæç»ãããŠããç»é¢ã®é åã匷調衚瀺ããããã¬ã€ã¢ãŠãã·ãããç¹å®ãããããã®ä»ã®ã¬ã³ããªã³ã°é¢é£ã®ããã©ãŒãã³ã¹åé¡ãæ€åºãããã§ããŸãããPaint flashingãããLayout Shift Regionsããªã©ã®æ©èœã¯éåžžã«åœ¹ç«ã¡ãŸãã
ããã©ãŒãã³ã¹ç£èŠããŒã«
ããã€ãã®ãµãŒãããŒãã£è£œããã©ãŒãã³ã¹ç£èŠããŒã«ã¯ãå®éã®ã·ããªãªã§ã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«é¢ããæŽå¯ãæäŸã§ããŸãããããã®ããŒã«ã¯ããã°ãã°æ¬¡ã®ãããªæ©èœãæäŸããŸãïŒ
- ãªã¢ã«ãŠãŒã¶ãŒã¢ãã¿ãªã³ã°ïŒRUMïŒïŒ å®éã®ãŠãŒã¶ãŒããããã©ãŒãã³ã¹ããŒã¿ãåéãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®ããæ£ç¢ºãªè¡šçŸãæäŸããŸãã
- ãšã©ãŒãã©ããã³ã°ïŒ ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããŠããå¯èœæ§ã®ããJavaScriptãšã©ãŒãç¹å®ãã远跡ããŸãã
- ããã©ãŒãã³ã¹ã¢ã©ãŒãïŒ ããã©ãŒãã³ã¹ã¡ããªã¯ã¹ãäºåã«å®çŸ©ããããããå€ãè¶ ããå Žåã«éç¥ãããããã«ã¢ã©ãŒããèšå®ããŸãã
ããã©ãŒãã³ã¹ç£èŠããŒã«ã®äŸãšããŠã¯ãNew RelicãSentryãDatadogãªã©ããããŸãã
äŸïŒReactãããã¡ã€ã©ã䜿çšããŠããã«ããã¯ãç¹å®ãã
ã¢ã€ãã ã®å€§ããªãªã¹ããã¬ã³ããªã³ã°ããè€éãªã³ã³ããŒãã³ãããããšããŸãããŠãŒã¶ãŒã¯ããã®ãªã¹ããã¹ã¯ããŒã«ãããšã«ã¯ã€ããå¿çãæªããšå ±åããŠããŸãã
- Reactãããã¡ã€ã©ã䜿çšããŠããªã¹ããã¹ã¯ããŒã«ããªããã»ãã·ã§ã³ãèšé²ããŸãã
- ãããã¡ã€ã©ã®rankedãã£ãŒããåæããŸããç¹å®ã®ã³ã³ããŒãã³ãã§ãã`ListItem`ãããªã¹ãå ã®åã¢ã€ãã ã«å¯ŸããŠäžè²«ããŠã¬ã³ããªã³ã°ã«é·ãæéãããã£ãŠããããšã«æ°ã¥ããŸãã
- `ListItem`ã³ã³ããŒãã³ãã®ã³ãŒãã調æ»ããŸããããŒã¿ã倿ŽãããŠããªããŠããåã¬ã³ããªã³ã°ã§èšç®ã³ã¹ãã®é«ãèšç®ãå®è¡ããŠããããšãããããŸãã
ãã®åæã«ãããæé©åãå¿ èŠãªã³ãŒãã®ç¹å®ã®é åã瀺ãããŸãããã®å Žåã`useMemo`ã䜿çšããŠé«ã³ã¹ããªèšç®ãã¡ã¢åããäžå¿ èŠã«åå®è¡ãããã®ãé²ãããšãã§ããŸãã
ãã¬ãŒã ããããã軜æžããããã®æŠç¥
ãã¬ãŒã ããããã®åå ãç¹å®ãããããããã®åé¡ã軜æžããããã©ãŒãã³ã¹ãåäžãããããã«ããŸããŸãªæŠç¥ãå®è£ ã§ããŸãïŒ
1. ã³ã³ããŒãã³ãã®æŽæ°ãæé©åãã
- ã¡ã¢åïŒ `React.memo`ã`useMemo`ã`useCallback`ã䜿çšããŠãã³ã³ããŒãã³ãã®äžèŠãªåã¬ã³ããªã³ã°ãé«ã³ã¹ããªèšç®ãé²ããŸããäºæããªãåäœãé¿ããããã«ãäŸåé åãæ£ããæå®ãããŠããããšã確èªããŠãã ããã
- ä»®æ³åïŒ å€§èŠæš¡ãªãªã¹ããããŒãã«ã«ã¯ã`react-window`ã`react-virtualized`ãªã©ã®ä»®æ³åã©ã€ãã©ãªã䜿çšããŠã衚瀺ãããŠããã¢ã€ãã ã®ã¿ãã¬ã³ããªã³ã°ããŸããããã«ãããå¿ èŠãªDOMæäœã®éãå€§å¹ ã«åæžãããŸãã
- ã³ãŒãåå²ïŒ ã¢ããªã±ãŒã·ã§ã³ãããå°ããªãã£ã³ã¯ã«åå²ãããªã³ããã³ãã§ããŒãã§ããããã«ããŸããããã«ãããåæããŒãæéãççž®ãããã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãåäžããŸããã³ã³ããŒãã³ãã¬ãã«ã®ã³ãŒãåå²ã«ã¯`React.lazy`ãš`Suspense`ã䜿çšããã«ãŒãããŒã¹ã®ã³ãŒãåå²ã«ã¯WebpackãParcelãªã©ã®ããŒã«ã䜿çšããŸãã
- äžå€æ§ïŒImmutabilityïŒïŒ äžå€ãªããŒã¿æ§é ã䜿çšããŠãäžèŠãªåã¬ã³ããªã³ã°ãåŒãèµ·ããå¯èœæ§ã®ããå¶çºçãªãã¥ãŒããŒã·ã§ã³ãåé¿ããŸããImmerã®ãããªã©ã€ãã©ãªã¯ãäžå€ããŒã¿ã®æ±ããç°¡çŽ åããã®ã«åœ¹ç«ã¡ãŸãã
2. é«ã³ã¹ããªèšç®ãåæžãã
- ãããŠã³ã¹ãšã¹ããããªã³ã°ïŒ ãããŠã³ã¹ãšã¹ããããªã³ã°ã䜿çšããŠãã€ãã³ããã³ãã©ãAPIåŒã³åºããªã©ã®é«ã³ã¹ããªæäœã®é »åºŠãå¶éããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ãé »ç¹ãªæŽæ°ã«ãã£ãŠå§åãããã®ãé²ããŸãã
- Webã¯ãŒã«ãŒïŒ èšç®éçŽçãªã¿ã¹ã¯ãWebã¯ãŒã«ãŒã«ç§»åãããŸããWebã¯ãŒã«ãŒã¯å¥ã®ã¹ã¬ããã§å®è¡ãããã¡ã€ã³ã¹ã¬ããããããã¯ããŸãããããã«ãããããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ãå®è¡ãããŠããéãUIã®å¿çæ§ãç¶æãããŸãã
- ãã£ãã·ã³ã°ïŒ é »ç¹ã«ã¢ã¯ã»ã¹ãããããŒã¿ããã£ãã·ã¥ããŠãã¬ã³ããªã³ã°ããšã«åèšç®ããã®ãé¿ããŸããé »ç¹ã«å€æŽãããªãããŒã¿ãä¿åããããã«ãã¡ã¢ãªå ãã£ãã·ã¥ãããŒã«ã«ã¹ãã¬ãŒãžã䜿çšããŸãã
3. DOMæäœãæé©åãã
- çŽæ¥çãªDOMæäœãæå°éã«æããïŒ Reactã®ã¬ã³ããªã³ã°ãµã€ã¯ã«å€ã§DOMãçŽæ¥æäœããããšã¯é¿ããŠãã ãããäžè²«æ§ãšå¹çã確ä¿ããããã«ãå¯èœãªéãReactã«DOMã®æŽæ°ãä»»ããŸãããã
- æŽæ°ã®ãããåŠçïŒ `ReactDOM.flushSync`ïŒæ éã«äœ¿çšããŠãã ããïŒïŒã䜿çšããŠãè€æ°ã®æŽæ°ãåäžã®ã¬ã³ããªã³ã°ã«ãŸãšããããšãã§ããŸããããã¯ãè€æ°ã®DOM倿Žãåæã«è¡ãéã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
4. é·æéå®è¡ã¿ã¹ã¯ã®ç®¡ç
- éåææäœïŒ `async/await`ãPromisesãªã©ã®éåææäœã䜿çšããŠãã¡ã€ã³ã¹ã¬ããã®ããããã³ã°ãåé¿ããŸãããããã¯ãŒã¯ãªã¯ãšã¹ãããã®ä»ã®I/Oæäœãéåæã«å®è¡ãããããã«ããŠãã ããã
- RequestAnimationFrameïŒ ã¢ãã¡ãŒã·ã§ã³ããã®ä»ã®èŠèŠçãªæŽæ°ãã¹ã±ãžã¥ãŒã«ããããã«`requestAnimationFrame`ã䜿çšããŸããããã«ãããæŽæ°ããã©ãŠã¶ã®ãªãã¬ãã·ã¥ã¬ãŒããšåæãããããã¹ã ãŒãºãªã¢ãã¡ãŒã·ã§ã³ãå®çŸããŸãã
5. ãµãŒãããŒãã£ã©ã€ãã©ãªã®æé©å
- ã©ã€ãã©ãªãæ éã«éžæããïŒ ããæé©åãããŠãããããã©ãŒãã³ã¹ã§ç¥ãããŠãããµãŒãããŒãã£ã©ã€ãã©ãªãéžæããŸããè¥å€§åããŠããããŸãã¯ããã©ãŒãã³ã¹åé¡ã®å±¥æŽãããã©ã€ãã©ãªã¯é¿ããŠãã ããã
- ã©ã€ãã©ãªã®é å»¶èªã¿èŸŒã¿ïŒ ãã¹ãŠã®ãµãŒãããŒãã£ã©ã€ãã©ãªãæåã«èªã¿èŸŒãã®ã§ã¯ãªãããªã³ããã³ãã§èªã¿èŸŒã¿ãŸããããã«ãããåæããŒãæéãççž®ãããã¢ããªã±ãŒã·ã§ã³ã®å šäœçãªããã©ãŒãã³ã¹ãåäžããŸãã
- ã©ã€ãã©ãªã宿çã«æŽæ°ããïŒ ããã©ãŒãã³ã¹ã®åäžããã°ä¿®æ£ã®æ©æµãåããããã«ããµãŒãããŒãã£ã©ã€ãã©ãªãææ°ã®ç¶æ ã«ä¿ã¡ãŸãã
6. ããã€ã¹ã®èœåãšãããã¯ãŒã¯ç¶æ³ã®èæ ®
- ã¢ãããã£ãã¬ã³ããªã³ã°ïŒ ããã€ã¹ã®èœåããããã¯ãŒã¯ç¶æ³ã«åºã¥ããŠUIã®è€éãã調æŽããããã«ãã¢ãããã£ãã¬ã³ããªã³ã°æè¡ãå®è£ ããŸããäŸãã°ãäœæ§èœããã€ã¹ã§ã¯ç»åã®è§£å床ãäžããããã¢ãã¡ãŒã·ã§ã³ãç°¡çŽ åãããããããšãèããããŸãã
- ãããã¯ãŒã¯ã®æé©åïŒ ã¢ããªã±ãŒã·ã§ã³ã®ãããã¯ãŒã¯ãªã¯ãšã¹ããæé©åããŠãã¬ã€ãã³ã·ãåæžããèªã¿èŸŒã¿æéãæ¹åããŸããã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ïŒCDNïŒãç»åæé©åãHTTPãã£ãã·ã³ã°ãªã©ã®æè¡ã䜿çšããŸãã
- ããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãïŒ ããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãã念é ã«çœ®ããŠã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããå€ããŸãã¯èœåã®äœãããã€ã¹ã§ãåºæ¬çãªã¬ãã«ã®æ©èœãæäŸã§ããããã«ããŸãã
äŸïŒé ããªã¹ãã³ã³ããŒãã³ãã®æé©å
é ããªã¹ãã³ã³ããŒãã³ãã®äŸã«æ»ããŸãããã`ListItem`ã³ã³ããŒãã³ããããã«ããã¯ãšããŠç¹å®ããåŸã以äžã®æé©åãé©çšã§ããŸãïŒ
- `ListItem`ã³ã³ããŒãã³ãã®ã¡ã¢åïŒ ã¢ã€ãã ã®ããŒã¿ã倿ŽãããŠããªãå Žåã«åã¬ã³ããªã³ã°ãé²ãããã«`React.memo`ã䜿çšããŸãã
- é«ã³ã¹ããªèšç®ã®ã¡ã¢åïŒ é«ã³ã¹ããªèšç®ã®çµæããã£ãã·ã¥ããããã«`useMemo`ã䜿çšããŸãã
- ãªã¹ãã®ä»®æ³åïŒ è¡šç€ºãããŠããã¢ã€ãã ã®ã¿ãã¬ã³ããªã³ã°ããããã«`react-window`ãŸãã¯`react-virtualized`ã䜿çšããŸãã
ãããã®æé©åãå®è£ ããããšã§ããªã¹ãã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããããã¬ãŒã ãããããåæžã§ããŸãã
ã°ããŒãã«ãªèæ ®äºé
ã°ããŒãã«ãªãŠãŒã¶ãŒåãã«Reactã¢ããªã±ãŒã·ã§ã³ãæé©åããéã«ã¯ããããã¯ãŒã¯ã®ã¬ã€ãã³ã·ãããã€ã¹ã®èœåãèšèªã®ããŒã«ã©ã€ãŒãŒã·ã§ã³ãªã©ã®èŠå ãèæ ®ããããšãäžå¯æ¬ ã§ãã
- ãããã¯ãŒã¯ã¬ã€ãã³ã·ïŒ äžçã®ããŸããŸãªå°åã®ãŠãŒã¶ãŒã¯ãç°ãªããããã¯ãŒã¯ã¬ã€ãã³ã·ãçµéšããå¯èœæ§ããããŸããCDNã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ã¢ã»ãããã°ããŒãã«ã«é ä¿¡ããã¬ã€ãã³ã·ãåæžããŸãã
- ããã€ã¹ã®èœåïŒ ãŠãŒã¶ãŒã¯ãåŠçèœåãéãããŠããå€ãã¹ããŒããã©ã³ãã¿ãã¬ãããªã©ãããŸããŸãªããã€ã¹ããã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããŠããå¯èœæ§ããããŸããããŸããŸãªããã€ã¹ã®èœåã«åãããŠã¢ããªã±ãŒã·ã§ã³ãæé©åããŠãã ããã
- èšèªã®ããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒ ã¢ããªã±ãŒã·ã§ã³ãããŸããŸãªèšèªãå°åã«åãããŠé©åã«ããŒã«ã©ã€ãºãããŠããããšã確èªããŠãã ãããããã«ã¯ãããã¹ãã®ç¿»èš³ãæ¥ä»ãšæ°å€ã®ãã©ãŒããããããŸããŸãªæžåæ¹åã«å¯Ÿå¿ããããã®UIã®èª¿æŽãå«ãŸããŸãã
çµè«
ãã¬ãŒã ããããã¯ãReactã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸãããã¬ãŒã ããããã®åå ãçè§£ãããã®èšäºã§æŠèª¬ããæŠç¥ãå®è£ ããããšã§ãã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã䜿çšããŠããŠããã¢ããªã±ãŒã·ã§ã³ãã¹ã ãŒãºã§å¿çæ§ã®é«ãããã©ãŒãã³ã¹ã«æé©åã§ããŸããã¢ããªã±ãŒã·ã§ã³ã宿çã«ãããã¡ã€ãªã³ã°ããããã©ãŒãã³ã¹ã¡ããªã¯ã¹ãç£èŠããå®éã®ããŒã¿ã«åºã¥ããŠæé©åæŠç¥ãé©å¿ãããããšã¯ãé·æã«ããã£ãŠæé©ãªããã©ãŒãã³ã¹ãç¶æããããã«äžå¯æ¬ ã§ããã°ããŒãã«ãªãŠãŒã¶ãŒãèæ ®ãã倿§ãªãããã¯ãŒã¯ç¶æ³ãããã€ã¹èœåã«åãããŠæé©åããããšãå¿ããªãã§ãã ããã
ã³ã³ããŒãã³ãã®æŽæ°ã®æé©åãé«ã³ã¹ããªèšç®ã®åæžãDOMæäœã®æé©åãé·æéå®è¡ã¿ã¹ã¯ã®ç®¡çããµãŒãããŒãã£ã©ã€ãã©ãªã®æé©åããããŠããã€ã¹ã®èœåãšãããã¯ãŒã¯ç¶æ³ã®èæ ®ã«çŠç¹ãåœãŠãããšã§ãäžçäžã®ãŠãŒã¶ãŒã«åªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸããæé©åãé 匵ã£ãŠãã ããïŒ