ãååŠè åããReact è¶ ç°¡åãªããã©ãŒãã³ã¹æ¹åæ¹æ³
ã¯ããã«
çŽè¿ã®æ¥åã§webã¢ããªã®è¡šç€ºã¹ããŒãæ¹åã«åãçµãæ©äŒããã£ãã®ã§ã
ä»åã¯ãã³ãŒãåå²ïŒCode SplittingïŒãã«ã€ããŠç°¡åã«ç޹ä»ããŠããããšæããŸãã
ã³ãŒãåå²ïŒCode SplittingïŒãšã¯
ã³ãŒãåå²ïŒCode SplittingïŒãšã¯ãã³ãŒããããŸããŸãªãã³ãã«ãŸãã¯ã³ã³ããŒãã³ãã«åå²ããããšã§ããããããããšã§ãå¿ èŠã«å¿ããŠç¹å®ã®ã³ã³ããŒãã³ãã®ã¿ãèªã¿èŸŒãã ãã䞊åã§èªã¿èŸŒãã ãããããšãå¯èœã«ããŸããïŒMDN Web Docs çšèªéããåŒçšïŒ
ã³ãŒãåå²ãå¿ èŠãªçç±
SPAã§ã¯åºæ¬çã«ã¢ããªã±ãŒã·ã§ã³å ã®ãã¡ã€ã«ã1ã€ã«ãã³ãã«ããŸãããã®ãã³ãã«ããããã¡ã€ã«ãWebããŒãžå ã«çœ®ãããšã«ãã£ãŠãã¢ããªå šäœãäžåºŠã«èªã¿èŸŒã¿ãŸãã
ããããã¢ããªã±ãŒã·ã§ã³ã倧ãããªãã»ã©ãã³ãã«ããããã¡ã€ã«ã®ãµã€ãºã倧ãããªãããã³ãã«ã«èŠããåŠçæéããã¡ã€ã«ãèªã¿èŸŒãæéãå¢ããŸããããªãã¡ãäœã察çãè¬ããªããŸãŸéçºãç¶ããŠãããšå€§ããªãã³ãã«ãäœæããŠããŸããçµæãšããŠã¢ããªã®èªã¿èŸŒã¿ã«å€ãã®æéãããã£ãŠããŸãäºæ ã«é¥ã£ãŠããŸãå¯èœæ§ããããŸãã
ããã§ãã³ãŒãåå²ïŒCode SplittingïŒ ãå©çšããŸãã
ã³ãŒãåå²ãå©çšããå Žåãããã«å¿
èŠãªã³ãŒã以å€ã¯åŸããèªã¿èŸŒãŸããããšãã§ããããåæè¡šç€ºã«ãããæéã®åæžãæåŸ
ã§ããŸããïŒãããé
å»¶èªã¿èŸŒã¿ãšãããŸããïŒ
ã€ãŸãããã³ãã«ã§äžåºŠã«èªã¿èŸŒãããŒã¿éã調æŽããåæè¡šç€ºæéã®ççž®ãã§ããããã«ãªããŸãã
ã©ã®ãããªéšåãã³ãŒãåå²ããã¹ãã
åããŠã®å Žåãã©ã®ããã«åå²ããã°ããã倿ãé£ãããšæãã®ã§ã
ãŸãã¯åçŽã«äžèšã®ãããªå€æåºæºãèšãããšãããšæããŸãã
-
ãªããŒãæãªã©ã«åæè¡šç€ºãããã³ã³ããŒãã³ã
â åªå çã«èªã¿èŸŒãå¿ èŠãããæ å ± -
ãŠãŒã¶ãŒãè¡åããããšã§ã¯ãããŠè¡šç€ºãããã³ã³ããŒãã³ã
â é å»¶èªã¿èŸŒã¿ãããæ å ±
ããã§ã¯ãã³ãŒãåå²ããéã®é å»¶èªã¿èŸŒã¿åŠçã«ã€ããŠå ·äœçãªå®è£ æ¹æ³ãèšèŒããããŸãã
React.lazy颿°
Reactã§ã¯ãReact.lazy颿°ãå©çšããããšã§é
å»¶èªã¿èŸŒã¿ãããããšãã§ããŸãã
React.lazy颿°ã䜿çšãããšãåããŠã¬ã³ããªã³ã°ããããŸã§ã³ã³ããŒãã³ãã®ã³ãŒãã®èªã¿èŸŒã¿ãå»¶æããããšãã§ããŸãã
ããŠã³ããŒã/å©ç𿹿³
äžèšã®ããã«ã³ãŒãã£ã³ã°ããã ãã§ç°¡åã«å©çšã§ããŸãã
const ComponentA = React.lazy(() => import('./ComponentA'));
ãŸãã<Suspense>ã³ã³ããŒãã³ãå
ã§å®çŸ©ããå¿
èŠããããŸãã
import React, { Suspense } from 'react';
const ComponentA = React.lazy(() => import('./ComponentA'));
function SampleComponent() {
return (
<div>
<Suspense fallback={<div>Loading...</div>}>
<ComponentA />
</Suspense>
</div>
);
}
Loadable Components
React.lazy颿°ä»¥å€ã«ããæ§ã
ãªæ¹æ³ã§å®è£
ããããšãã§ããŸãã
äŸãã°ãç§ãçŸåšéçºã«æºãã£ãŠãããµãŒãã¹ã§ã¯ã
ãµãŒãããŒãã£ãŒã®Loadable ComponentsïŒå
¬åŒãµã€ãïŒãå©çšããŠããŸãã
Loadable Componentsã®ã¡ãªãããšããŠäž»ã«3ã€ãããŸãã
-
<Suspense>ã®å©çšãä»»æã - SSRã§ãå©çšã§ããã
- importæã«propsãä»£å ¥ã§ããã
ããŠã³ããŒã/å©ç𿹿³
éçºç°å¢ã«ãŠãLoadable Componentsãã€ã³ã¹ããŒã«ããã
npm install @loadable/component
yarn add @loadable/component
å©çšãããã³ã³ããŒãã³ãã§Loadable Componentsãã€ã³ããŒãããã
import loadable from '@loadable/component'
const ComponentA = loadable(() => import('./ComponentA'))
const SampleComponent = () => {
return (
<div>
<ComponentA />
</div>
);
};
export default SampleComponent;
ãã®ããã«ã³ãŒãã£ã³ã°ããã ãã§ãç°¡åã«ç¹å®ã®ã³ã³ããŒãã³ããé å»¶èªã¿èŸŒã¿ã§ããŸãã
æåŸã«
ä»åã¯ãã³ãŒãåå²ïŒCode SplittingïŒã«ã€ããŠèšè¿°ããããŸãããããšãã°ãããŒãžã®åæè¡šç€ºã«å¿ èŠãªæ å ±ã ããèªã¿èŸŒãã§ãããæ å ±ãå±éãã床ã«å¿ èŠãªæ å ±ãèªã¿èŸŒãã°ãããŒãžã®åæè¡šç€ºæã®åŠçè² è·ã軜æžã§ããŸãã衚瀺ã¹ããŒããå€ããã ãã§å©çšãŠãŒã¶ãŒã®å¿çè² æ ã¯å€§ããå€ãããŸãããã²ãã·ã¹ãã éçºããéã«æèããŠåãçµãŸããŠã¿ãŠã¯ãããã§ããããã
Discussion