Reactã®é å»¶èªã¿èŸŒã¿ãšã³ã³ããŒãã³ãã®ã³ãŒãåå²ãå®è£ ããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåæèªã¿èŸŒã¿æéãåçã«æ¹åããæ¹æ³ãåŠã³ãŸãããã
Reactã®é å»¶èªã¿èŸŒã¿ïŒã³ã³ããŒãã³ãã®ã³ãŒãåå²ã«ããããã©ãŒãã³ã¹åäž
仿¥ã®ãŠã§ãéçºã®äžçã§ã¯ãããã©ãŒãã³ã¹ãæãéèŠã§ãããŠãŒã¶ãŒã¯é«éãªèªã¿èŸŒã¿æéãšã¹ã ãŒãºãªã€ã³ã¿ã©ã¯ã·ã§ã³ãæåŸ
ããŠããŸããç¹ã«è€éãªReactã¢ããªã±ãŒã·ã§ã³ã«ãããå€§èŠæš¡ãªJavaScriptãã³ãã«ã¯ãåæèªã¿èŸŒã¿æéãšå
šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸãããã®åé¡ã«å¯ŸåŠããããã®åŒ·åãªææ³ã®äžã€ãé
å»¶èªã¿èŸŒã¿ãç¹ã«ã³ã³ããŒãã³ãã®ã³ãŒãåå²ã§ãããã®èšäºã§ã¯ãReact.lazy
ãšSuspense
ã䜿çšããReactã®é
å»¶èªã¿èŸŒã¿ãçè§£ããå®è£
ããããã®å
æ¬çãªã¬ã€ããæäŸããŸãã
é å»¶èªã¿èŸŒã¿ãšã³ãŒãåå²ãšã¯ïŒ
é å»¶èªã¿èŸŒã¿ïŒãªã³ããã³ãèªã¿èŸŒã¿ãšãåŒã°ããïŒã¯ããªãœãŒã¹ïŒãã®å Žåã¯Reactã³ã³ããŒãã³ãïŒã®èªã¿èŸŒã¿ããå®éã«å¿ èŠã«ãªããŸã§é ãããæè¡ã§ããã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®ã³ãŒããæåã«èªã¿èŸŒãã®ã§ã¯ãªããæåã«å¿ èŠãªéšåã ããèªã¿èŸŒã¿ãæ®ãã®ã³ãŒãã¯ãŠãŒã¶ãŒãç¹å®ã®ã«ãŒãã«ç§»åããããç¹å®ã®ã³ã³ããŒãã³ããæäœããããããšãã«éåæã§èªã¿èŸŒãŸããŸããããã«ãããåæãã³ãã«ãµã€ãºãå€§å¹ ã«åæžãããTime to Interactive (TTI) ãåäžããŸãã
ã³ãŒãåå²ãšã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããããå°ããã管çãããããã£ã³ã¯ïŒãã³ãã«ïŒã«åå²ããããã»ã¹ã§ãããããã®ãã³ãã«ã¯ãç¬ç«ããŠãªã³ããã³ãã§èªã¿èŸŒãããšãã§ããŸããReactã®é å»¶èªã¿èŸŒã¿ã¯ãã³ãŒãåå²ã掻çšããŠãå¿ èŠãªãšãã«ã®ã¿ã³ã³ããŒãã³ããèªã¿èŸŒã¿ãŸãã
é å»¶èªã¿èŸŒã¿ãšã³ãŒãåå²ã®å©ç¹
- åæèªã¿èŸŒã¿æéã®æ¹åïŒ åæãã³ãã«ãµã€ãºãåæžããããšã§ããã©ãŠã¶ãæåã«ããŠã³ããŒãããŠè§£æããJavaScriptãå°ãªããªããããŒãžã®èªã¿èŸŒã¿æéãççž®ãããŸããããã¯ããããã¯ãŒã¯æ¥ç¶ãé ãããŸãã¯äœã¹ããã¯ãªããã€ã¹ã䜿çšããŠãããŠãŒã¶ãŒã«ãšã£ãŠç¹ã«éèŠã§ãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžïŒ èªã¿èŸŒã¿æéãéããšãããå¿çæ§ãé«ãå¿«é©ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããçŽåž°çãæžããããŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããé«ããŸãã
- ãªãœãŒã¹æ¶è²»ã®åæžïŒ å¿ èŠãªã³ãŒãã®ã¿ãèªã¿èŸŒãããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªäœ¿çšéãåæžãããç¹ã«ã¢ãã€ã«ããã€ã¹ã«ãšã£ãŠæçã§ãã
- SEOã®åäžïŒ æ€çŽ¢ãšã³ãžã³ã¯èªã¿èŸŒã¿æéãéããŠã§ããµã€ãã奜ãããããŠã§ããµã€ãã®æ€çŽ¢ãšã³ãžã³ã©ã³ãã³ã°ãåäžããå¯èœæ§ããããŸãã
React.lazy
ãšSuspense
ã«ããReacté
å»¶èªã¿èŸŒã¿ã®å®è£
Reactã¯ãReact.lazy
ãšSuspense
ã䜿çšããŠã³ã³ããŒãã³ããé
å»¶èªã¿èŸŒã¿ããããã®çµã¿èŸŒã¿ã¡ã«ããºã ãæäŸããŠããŸããReact.lazy
ã䜿çšãããšã³ã³ããŒãã³ããåçã«ã€ã³ããŒãã§ããSuspense
ã¯ã³ã³ããŒãã³ãã®èªã¿èŸŒã¿äžã«ãã©ãŒã«ããã¯UIã衚瀺ããæ¹æ³ãæäŸããŸãã
ã¹ããã1ïŒReact.lazy
ã«ããåçã€ã³ããŒã
React.lazy
ã¯ãimport()
ãåŒã³åºã颿°ãåŒæ°ã«åããŸããimport()
颿°ã¯åçã€ã³ããŒãã§ãããé
å»¶èªã¿èŸŒã¿ãããã³ã³ããŒãã³ããå«ãã¢ãžã¥ãŒã«ã«è§£æ±ºãããPromiseãè¿ããŸãã
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
ãã®äŸã§ã¯ãMyComponent
ã¯ã¬ã³ããªã³ã°ããããŸã§èªã¿èŸŒãŸããŸãããimport('./MyComponent')
æã¯ã./MyComponent
ãã¡ã€ã«ããã³ã³ããŒãã³ããåçã«ã€ã³ããŒãããŸãããã¹ã¯çŸåšã®ãã¡ã€ã«ããã®çžå¯Ÿãã¹ã§ããããšã«æ³šæããŠãã ããã
ã¹ããã2ïŒSuspense
ã«ããèªã¿èŸŒã¿ç¶æ
ã®åŠç
é
å»¶èªã¿èŸŒã¿ã«ã¯ã³ã³ããŒãã³ãã®éåæèªã¿èŸŒã¿ã䌎ããããã³ã³ããŒãã³ããååŸãããŠããéã®èªã¿èŸŒã¿ç¶æ
ãåŠçãããã©ãŒã«ããã¯UIã衚瀺ããæ¹æ³ãå¿
èŠã§ããããã§Suspense
ãç»å ŽããŸããSuspense
ã¯ãåã³ã³ããŒãã³ãã®æºåãæŽããŸã§ã¬ã³ããªã³ã°ããäžæåæ¢ãã§ããReactã³ã³ããŒãã³ãã§ããåã³ã³ããŒãã³ãã®èªã¿èŸŒã¿äžã«ã¬ã³ããªã³ã°ããUIãæå®ããfallback
ãããããåããŸãã
import React, { lazy, Suspense } from 'react';
const MyComponent = lazy(() => import('./MyComponent'));
function App() {
return (
Loading...
ãã®äŸã§ã¯ãSuspense
ã³ã³ããŒãã³ããMyComponent
ãã©ããããŠããŸããMyComponent
ã®èªã¿èŸŒã¿äžã¯ãfallback
ããããïŒ
ïŒãã¬ã³ããªã³ã°ãããŸããMyComponent
ãèªã¿èŸŒãŸãããšããã©ãŒã«ããã¯UIã眮ãæããããŸãã
äŸïŒReact Routerã¢ããªã±ãŒã·ã§ã³ã§ã®ã«ãŒãã®é å»¶èªã¿èŸŒã¿
é å»¶èªã¿èŸŒã¿ã¯ãReact Routerã¢ããªã±ãŒã·ã§ã³ã®ã«ãŒãã§ç¹ã«åœ¹ç«ã¡ãŸããã¢ããªã±ãŒã·ã§ã³ã®ããŒãžå šäœãã»ã¯ã·ã§ã³ãé å»¶èªã¿èŸŒã¿ããããšã§ããŠã§ããµã€ãã®åæèªã¿èŸŒã¿æéãæ¹åã§ããŸãã
import React, { lazy, Suspense } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const Home = lazy(() => import('./pages/Home'));
const About = lazy(() => import('./pages/About'));
const Contact = lazy(() => import('./pages/Contact'));
function App() {
return (
Loading...