å®èšŒæžã¿ã®Reactããã©ãŒãã³ã¹æé©åæè¡ãåŠã³ãããé«éã§å¹ççãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãã¡ã¢åãã³ãŒãåå²ãä»®æ³ãªã¹ããªã©ãç¶²çŸ ããã°ããŒãã«ãªã¢ã¯ã»ã·ããªãã£ãšã¹ã±ãŒã©ããªãã£ã«çŠç¹ãåœãŠãã¬ã€ãã§ãã
Reactã®ããã©ãŒãã³ã¹æé©åïŒã°ããŒãã«éçºè åãå®å šã¬ã€ã
ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã®åŒ·åãªJavaScriptã©ã€ãã©ãªã§ããReactã¯ãäžçäžã®éçºè ã«åºãæ¡çšãããŠããŸããReactã¯å€ãã®å©ç¹ãæäŸããŸãããé©åã«å¯ŸåŠããªããšããã©ãŒãã³ã¹ãããã«ããã¯ã«ãªãå¯èœæ§ããããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãã°ããŒãã«ãªå©çšè ãèæ ®ããReactã¢ããªã±ãŒã·ã§ã³ã®é床ãå¹çãã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæé©åããããã®å®è·µçãªæŠç¥ãšãã¹ããã©ã¯ãã£ã¹ãæäŸããŸãã
Reactã®ããã©ãŒãã³ã¹ãçè§£ãã
æé©åæè¡ã«é£ã³èŸŒãåã«ãReactã®ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ã®ããèŠå ãçè§£ããããšãéèŠã§ãããããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- äžèŠãªåã¬ã³ããªã³ã°ïŒ Reactã¯ãpropsãŸãã¯stateã倿Žããããã³ã«ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ããŸããç¹ã«è€éãªã³ã³ããŒãã³ãã§ã®éå°ãªåã¬ã³ããªã³ã°ã¯ãããã©ãŒãã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸãã
- 巚倧ãªã³ã³ããŒãã³ãããªãŒïŒ æ·±ããã¹ããããã³ã³ããŒãã³ãéå±€ã¯ãã¬ã³ããªã³ã°ãšæŽæ°ãé ãããå¯èœæ§ããããŸãã
- éå¹çãªã¢ã«ãŽãªãºã ïŒ ã³ã³ããŒãã³ãå ã§éå¹çãªã¢ã«ãŽãªãºã ã䜿çšãããšãããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸãã
- 倧ããªãã³ãã«ãµã€ãºïŒ 倧ããªJavaScriptãã³ãã«ãµã€ãºã¯ãåæèªã¿èŸŒã¿æéãå¢å ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«åœ±é¿ãäžããŸãã
- ãµãŒãããŒãã£ã©ã€ãã©ãªïŒ ã©ã€ãã©ãªã¯æ©èœãæäŸããŸãããæé©åãäžååãŸãã¯é床ã«è€éãªã©ã€ãã©ãªã¯ãããã©ãŒãã³ã¹ã®åé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã
- ãããã¯ãŒã¯é å»¶ïŒ ããŒã¿ã®ååŸãAPIåŒã³åºãã¯ãç¹ã«ç°ãªãå°ççãªå Žæã«ãããŠãŒã¶ãŒã«ãšã£ãŠé ããªãå¯èœæ§ããããŸãã
äž»èŠãªæé©åæŠç¥
1. ã¡ã¢åæè¡
ã¡ã¢åã¯ãã³ã¹ãã®é«ã颿°åŒã³åºãã®çµæããã£ãã·ã¥ããåãå ¥åãå床çºçããå Žåã«ãã£ãã·ã¥ãããçµæãè¿ã匷åãªæé©åæè¡ã§ããReactã¯ã¡ã¢åã®ããã«ããã€ãã®çµã¿èŸŒã¿ããŒã«ãæäŸããŠããŸãïŒ
- React.memoïŒ ããã¯ã颿°ã³ã³ããŒãã³ããã¡ã¢åããé«éã³ã³ããŒãã³ãïŒHOCïŒã§ããpropsã®æµ ãæ¯èŒãè¡ããã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããã©ãããæ±ºå®ããŸãã
const MyComponent = React.memo(function MyComponent(props) {
// Component logic
return <div>{props.data}</div>;
});
äŸïŒ ãŠãŒã¶ãŒã®ãããã£ãŒã«æ
å ±ã衚瀺ããã³ã³ããŒãã³ããæ³åããŠã¿ãŠãã ããããŠãŒã¶ãŒã®ãããã£ãŒã«ããŒã¿ã倿ŽãããŠããªãå Žåãã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ããå¿
èŠã¯ãããŸãããReact.memoã¯ããã®ã·ããªãªã§äžèŠãªåã¬ã³ããªã³ã°ãé²ãããšãã§ããŸãã
- useMemoïŒ ãã®ããã¯ã¯é¢æ°ã®çµæãã¡ã¢åããŸããäŸåé¢ä¿ã倿Žãããå Žåã«ã®ã¿å€ãåèšç®ããŸãã
const memoizedValue = useMemo(() => {
// Expensive calculation
return computeExpensiveValue(a, b);
}, [a, b]);
äŸïŒ è€éãªæ°åŒã®èšç®ãå€§èŠæš¡ãªããŒã¿ã»ããã®åŠçã¯ã³ã¹ãããããå ŽåããããŸããuseMemoã¯ããã®èšç®ã®çµæããã£ãã·ã¥ããæ¯åã®ã¬ã³ããªã³ã°ã§åèšç®ãããã®ãé²ããŸãã
- useCallbackïŒ ãã®ããã¯ã¯é¢æ°èªäœãã¡ã¢åããŸããäŸåé¢ä¿ã®ããããã倿Žãããå Žåã«ã®ã¿å€æŽããããã¡ã¢åãããããŒãžã§ã³ã®é¢æ°ãè¿ããŸããããã¯ãåç §ã®ç䟡æ§ã«äŸåããæé©åãããåã³ã³ããŒãã³ãã«ã³ãŒã«ããã¯ãæž¡ãå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã
const memoizedCallback = useCallback(() => {
// Function logic
doSomething(a, b);
}, [a, b]);
äŸïŒ 芪ã³ã³ããŒãã³ããReact.memoã䜿çšããåã³ã³ããŒãã³ãã«é¢æ°ãæž¡ããšããŸããuseCallbackããªããšã芪ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããã³ã«é¢æ°ãåäœæãããpropsãè«ççã«å€æŽãããŠããªããŠãåã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããŠããŸããŸããuseCallbackã¯ã颿°ã®äŸåé¢ä¿ã倿Žãããå Žåã«ã®ã¿åã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããããã«ããŸãã
ã°ããŒãã«ãªèæ ®äºé ïŒ ããŒã¿åœ¢åŒãæ¥æèšç®ãã¡ã¢åã«äžãã圱é¿ãèæ ®ããŠãã ãããäŸãã°ãã³ã³ããŒãã³ãå ã§ãã±ãŒã«åºæã®æ¥ä»åœ¢åŒã䜿çšãããšããã±ãŒã«ãé »ç¹ã«å€æŽãããå Žåã«æå³ããã¡ã¢åãå£ããå¯èœæ§ããããŸããæ¯èŒã®ããã®äžè²«ããpropsã確ä¿ããããã«ãå¯èœãªéãããŒã¿åœ¢åŒãæ£èŠåããŠãã ããã
2. ã³ãŒãåå²ãšé å»¶èªã¿èŸŒã¿
ã³ãŒãåå²ãšã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããããå°ããªãã³ãã«ã«åå²ãããªã³ããã³ãã§èªã¿èŸŒããããã«ããããã»ã¹ã§ããããã«ãããåæèªã¿èŸŒã¿æéãççž®ãããå
šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸããReactã¯ãåçã€ã³ããŒããšReact.lazy颿°ã䜿çšããŠãã³ãŒãåå²ãçµã¿èŸŒã¿ã§ãµããŒãããŠããŸãã
const MyComponent = React.lazy(() => import('./MyComponent'));
function MyComponentWrapper() {
return (
<Suspense fallback={<div>Loading...</div>}>
<MyComponent />
</Suspense>
);
}
äŸïŒ è€æ°ã®ããŒãžãæã€Webã¢ããªã±ãŒã·ã§ã³ãæ³åããŠã¿ãŠãã ããããã¹ãŠã®ããŒãžã®ã³ãŒããæåã«ãã¹ãŠèªã¿èŸŒãã®ã§ã¯ãªããã³ãŒãåå²ã䜿çšããŠããŠãŒã¶ãŒãåããŒãžã«ç§»åãããšãã«ã®ã¿ãã®ããŒãžã®ã³ãŒããèªã¿èŸŒãããšãã§ããŸãã
React.lazyã䜿çšãããšãåçã€ã³ããŒããéåžžã®ã³ã³ããŒãã³ããšããŠã¬ã³ããªã³ã°ã§ããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ãèªåçã«ã³ãŒãåå²ãããŸãã Suspenseã䜿çšãããšãé å»¶èªã¿èŸŒã¿ãããã³ã³ããŒãã³ãããã§ãããããŠããéããã©ãŒã«ããã¯UIïŒäŸïŒããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒïŒã衚瀺ã§ããŸãã
ã°ããŒãã«ãªèæ ®äºé ïŒ ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒã䜿çšããŠãã³ãŒããã³ãã«ãã°ããŒãã«ã«é ä¿¡ããããšãæ€èšããŠãã ãããCDNã¯ãäžçäžã®ãµãŒããŒã«ã¢ã»ããããã£ãã·ã¥ãããŠãŒã¶ãŒãå Žæã«é¢ä¿ãªãè¿ éã«ããŠã³ããŒãã§ããããã«ããŸãããŸããå°åã«ãã£ãŠç°ãªãã€ã³ã¿ãŒãããé床ãããŒã¿ã³ã¹ãã«ã泚æããŠãã ãããå¿ é ã³ã³ãã³ãã®èªã¿èŸŒã¿ãåªå ããéèŠã§ãªããªãœãŒã¹ã®èªã¿èŸŒã¿ã¯é å»¶ãããŸãããã
3. ä»®æ³ãªã¹ããšããŒãã«
倧ããªãªã¹ããããŒãã«ãã¬ã³ããªã³ã°ããå Žåããã¹ãŠã®èŠçŽ ãäžåºŠã«ã¬ã³ããªã³ã°ããã®ã¯éåžžã«éå¹ççã§ããä»®æ³åæè¡ã¯ãçŸåšç»é¢ã«è¡šç€ºãããŠããã¢ã€ãã ã®ã¿ãã¬ã³ããªã³ã°ããããšã§ããã®åé¡ã解決ããŸããreact-windowãreact-virtualizedã®ãããªã©ã€ãã©ãªã¯ã倧ããªãªã¹ããããŒãã«ãã¬ã³ããªã³ã°ããããã®æé©åãããã³ã³ããŒãã³ããæäŸããŸãã
import { FixedSizeList } from 'react-window';
const Row = ({ index, style }) => (
<div style={style}>
Row {index}
</div>
);
function MyListComponent() {
return (
<FixedSizeList
height={400}
width={300}
itemSize={50}
itemCount={1000}
>
{Row}
</FixedSizeList>
);
}
äŸïŒ Eã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ã§äœåãã®ååã®ãªã¹ãã衚瀺ããå Žåããã¹ãŠã®ååãäžåºŠã«ã¬ã³ããªã³ã°ããããšé ããªãå¯èœæ§ããããŸããä»®æ³ãªã¹ãã¯ããŠãŒã¶ãŒã®ãã¥ãŒããŒãã«çŸåšè¡šç€ºãããŠããååã®ã¿ãã¬ã³ããªã³ã°ãããããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã
ã°ããŒãã«ãªèæ ®äºé ïŒ ãªã¹ããããŒãã«ã«ããŒã¿ã衚瀺ããéã¯ãç°ãªãæåã»ãããããã¹ãã®æžåæ¹åã«æ³šæããŠãã ãããã¢ããªã±ãŒã·ã§ã³ãè€æ°ã®èšèªãæåããµããŒãããå¿ èŠãããå Žåã¯ãä»®æ³åã©ã€ãã©ãªãåœéåïŒi18nïŒãšå³ããå·ŠïŒRTLïŒã¬ã€ã¢ãŠãããµããŒãããŠããããšã確èªããŠãã ããã
4. ç»åã®æé©å
ç»åã¯ãWebã¢ããªã±ãŒã·ã§ã³å šäœã®ãµã€ãºã«å€§ããå¯äžããããšããããããŸããããã©ãŒãã³ã¹ãåäžãããããã«ã¯ãç»åã®æé©åãäžå¯æ¬ ã§ãã
- ç»åå§çž®ïŒ ImageOptimãTinyPNGãCompressor.ioãªã©ã®ããŒã«ã䜿çšããŠãå質ãå€§å¹ ã«æãªãããšãªãç»åãå§çž®ããŸãã
- ã¬ã¹ãã³ã·ãç»åïŒ ãŠãŒã¶ãŒã®ããã€ã¹ãç»é¢ãµã€ãºã«åºã¥ããŠã
<picture>èŠçŽ ãŸãã¯<img>èŠçŽ ã®srcset屿§ã䜿çšããŠãç°ãªããµã€ãºã®ç»åãæäŸããŸãã - é
å»¶èªã¿èŸŒã¿ïŒ
react-lazyloadã®ãããªã©ã€ãã©ãªããã€ãã£ãã®loading="lazy"屿§ã䜿çšããŠããã¥ãŒããŒãã«è¡šç€ºãããçŽåã«ã®ã¿ç»åãèªã¿èŸŒã¿ãŸãã - WebPãã©ãŒãããïŒ JPEGãPNGãšæ¯èŒããŠåªããå§çž®çãæäŸããWebPç»åãã©ãŒãããã䜿çšããŸãã
<img src="image.jpg" loading="lazy" alt="My Image"/>
äŸïŒ äžçäžã®ç®çå°ã®é«è§£å床ç»åã衚瀺ããæ è¡ãŠã§ããµã€ãã¯ãç»åã®æé©åãã倧ããªæ©æµãåããããšãã§ããŸããç»åãå§çž®ããã¬ã¹ãã³ã·ãç»åãæäŸããããããé å»¶èªã¿èŸŒã¿ããããšã§ããŠã§ããµã€ãã¯èªã¿èŸŒã¿æéãå€§å¹ ã«ççž®ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããšãã§ããŸãã
ã°ããŒãã«ãªèæ ®äºé ïŒ å°åã«ãã£ãŠç°ãªãããŒã¿ã³ã¹ãã«æ³šæããŠãã ããã垯åå¹ ãéãããŠããããããŒã¿ãã©ã³ãé«äŸ¡ãªãŠãŒã¶ãŒã®ããã«ãäœè§£å床ã®ç»åãããŠã³ããŒããããªãã·ã§ã³ãæäŸããŸããããŸããŸãªãã©ãŠã¶ãããã€ã¹ã§åºããµããŒããããŠããé©åãªç»å圢åŒã䜿çšããŠãã ããã
5. äžèŠãªstateæŽæ°ã®åé¿
stateã®æŽæ°ã¯Reactã§åã¬ã³ããªã³ã°ãããªã¬ãŒããŸããäžèŠãªstateæŽæ°ãæå°éã«æããããšã§ãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã
- äžå€ãªããŒã¿æ§é ïŒ äžå€ãªããŒã¿æ§é ã䜿çšããŠãããŒã¿ã®å€æŽãå¿ èŠãªå Žåã«ã®ã¿åã¬ã³ããªã³ã°ãããªã¬ãŒãããããã«ããŸããImmerãImmutable.jsã®ãããªã©ã€ãã©ãªããããå©ããŸãã
- setStateã®ãããåŠçïŒ Reactã¯è€æ°ã®
setStateåŒã³åºããåäžã®æŽæ°ãµã€ã¯ã«ã«ãŸãšããããšã§ããã©ãŒãã³ã¹ãåäžãããŸãããã ããéåæã³ãŒãïŒäŸïŒsetTimeoutãfetchïŒå ã®setStateåŒã³åºãã¯èªåçã«ãããåŠçãããªãããšã«æ³šæããŠãã ããã - 颿°åœ¢åŒã®setStateïŒ æ°ããstateãåã®stateã«äŸåããå Žåã¯ã颿°åœ¢åŒã®
setStateã䜿çšããŸããããã«ãããç¹ã«æŽæ°ããããåŠçãããå Žåã«ãæ£ããåã®stateå€ãæ±ã£ãŠããããšãä¿èšŒãããŸãã
this.setState((prevState) => ({
count: prevState.count + 1,
}));
äŸïŒ ãŠãŒã¶ãŒå
¥åã«åºã¥ããŠstateãé »ç¹ã«æŽæ°ããã³ã³ããŒãã³ãã¯ãäžå€ãªããŒã¿æ§é ãšé¢æ°åœ¢åŒã®setStateã䜿çšããããšã§æ©æµãåããããšãã§ããŸããããã«ãããããŒã¿ãå®éã«å€æŽãããå Žåã«ã®ã¿ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããæŽæ°ãå¹ççã«å®è¡ãããããã«ãªããŸãã
ã°ããŒãã«ãªèæ ®äºé ïŒ ç°ãªãèšèªã§ã®ç°ãªãå ¥åæ¹æ³ãããŒããŒãã¬ã€ã¢ãŠãã«æ³šæããŠãã ãããstateæŽæ°ããžãã¯ãç°ãªãæåã»ãããå ¥å圢åŒãæ£ããåŠçããããã«ããŠãã ããã
6. ãããŠã³ã¹ãšã¹ããããªã³ã°
ãããŠã³ã¹ãšã¹ããããªã³ã°ã¯ã颿°ãå®è¡ãããé »åºŠãå¶éããããã«äœ¿çšãããæè¡ã§ããããã¯ãã¹ã¯ããŒã«ã€ãã³ããå ¥å倿Žãªã©ãé »ç¹ã«çºçããã€ãã³ããåŠçããã®ã«åœ¹ç«ã¡ãŸãã
- ãããŠã³ã¹ïŒ 颿°ãæåŸã«åŒã³åºãããŠããäžå®æéãçµéããåŸã«ããã®é¢æ°ã®å®è¡ãé å»¶ãããŸãã
- ã¹ããããªã³ã°ïŒ æå®ãããæéå ã«æå€§ã§1åã ã颿°ãå®è¡ããŸãã
function debounce(func, delay) {
let timeout;
return function(...args) {
const context = this;
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(context, args), delay);
};
}
const handleInputChange = debounce((event) => {
// Perform expensive operation
console.log(event.target.value);
}, 250);
äŸïŒ ããŒã¹ãããŒã¯ããšAPIåŒã³åºããããªã¬ãŒããæ€çŽ¢å ¥åãã£ãŒã«ãã¯ããããŠã³ã¹ã䜿çšããŠæé©åã§ããŸãããŠãŒã¶ãŒãçæéã¿ã€ãã³ã°ã忢ãããŸã§APIåŒã³åºããé ãããããšã§ãäžèŠãªAPIåŒã³åºãã®æ°ãæžãããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
ã°ããŒãã«ãªèæ ®äºé ïŒ å°åã«ãã£ãŠç°ãªããããã¯ãŒã¯ç¶æ³ãé å»¶ã«æ³šæããŠãã ãããçæ³çã§ãªããããã¯ãŒã¯ç¶æ³äžã§ãå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«ããããŠã³ã¹ãšã¹ããããªã³ã°ã®é å»¶ãé©å®èª¿æŽããŠãã ããã
7. ã¢ããªã±ãŒã·ã§ã³ã®ãããã¡ã€ãªã³ã°
React Profilerã¯ãReactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ããã«ããã¯ãç¹å®ããããã®åŒ·åãªããŒã«ã§ããåã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ã«è²»ããããæéãèšé²ã»åæããæé©åãå¿ èŠãªé åãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
React Profilerã®äœ¿ç𿹿³ïŒ
- Reactã¢ããªã±ãŒã·ã§ã³ã§ãããã¡ã€ãªã³ã°ãæå¹ã«ããŸãïŒéçºã¢ãŒããŸãã¯æ¬çªãããã¡ã€ãªã³ã°ãã«ãã䜿çšïŒã
- ãããã¡ã€ãªã³ã°ã»ãã·ã§ã³ã®èšé²ãéå§ããŸãã
- åæãããã³ãŒããã¹ãããªã¬ãŒããããã«ã¢ããªã±ãŒã·ã§ã³ãæäœããŸãã
- ãããã¡ã€ãªã³ã°ã»ãã·ã§ã³ã忢ããŸãã
- ãããã¡ã€ãªã³ã°ããŒã¿ãåæããŠãé ãã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ã®åé¡ãç¹å®ããŸãã
ãããã¡ã€ã©ããŒã¿ã®è§£éïŒ
- ã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°æéïŒ ã¬ã³ããªã³ã°ã«æéããããã³ã³ããŒãã³ããç¹å®ããŸãã
- åã¬ã³ããªã³ã°é »åºŠïŒ äžèŠã«åã¬ã³ããªã³ã°ãããŠããã³ã³ããŒãã³ããç¹å®ããŸãã
- Propã®å€æŽïŒ ã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ãåŒãèµ·ãããŠããpropsãåæããŸãã
ã°ããŒãã«ãªèæ ®äºé ïŒ ã¢ããªã±ãŒã·ã§ã³ããããã¡ã€ãªã³ã°ããéã¯ãç°ãªããããã¯ãŒã¯ç¶æ³ãããã€ã¹ã®èœåãã·ãã¥ã¬ãŒãããŠãç°ãªãå°åãããã€ã¹ã§ã®ããã©ãŒãã³ã¹ã®çŸå®çãªç¶æ³ãææ¡ããããšãæ€èšããŠãã ããã
8. ãµãŒããŒãµã€ãã¬ã³ããªã³ã°ïŒSSRïŒãšéçãµã€ãçæïŒSSGïŒ
ãµãŒããŒãµã€ãã¬ã³ããªã³ã°ïŒSSRïŒãšéçãµã€ãçæïŒSSGïŒã¯ãReactã¢ããªã±ãŒã·ã§ã³ã®åæèªã¿èŸŒã¿æéãšSEOãæ¹åã§ããæè¡ã§ãã
- ãµãŒããŒãµã€ãã¬ã³ããªã³ã°ïŒSSRïŒïŒ ãµãŒããŒäžã§Reactã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããå®å šã«ã¬ã³ããªã³ã°ãããHTMLãã¯ã©ã€ã¢ã³ãã«éä¿¡ããŸããããã«ãããåæèªã¿èŸŒã¿æéãæ¹åãããã¢ããªã±ãŒã·ã§ã³ãæ€çŽ¢ãšã³ãžã³ã«ãã£ãŠã¯ããŒã«ããããããªããŸãã
- éçãµã€ãçæïŒSSGïŒïŒ ãã«ãæã«åããŒãžã®HTMLãçæããŸããããã¯ãé »ç¹ãªæŽæ°ãå¿ èŠãšããªãã³ã³ãã³ãäžå¿ã®ãŠã§ããµã€ãã«æé©ã§ãã
Next.jsãGatsbyã®ãããªãã¬ãŒã ã¯ãŒã¯ã¯ãSSRãšSSGãçµã¿èŸŒã¿ã§ãµããŒãããŠããŸãã
ã°ããŒãã«ãªèæ ®äºé ïŒ SSRãŸãã¯SSGã䜿çšããå Žåã¯ãã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒã䜿çšããŠãçæãããHTMLããŒãžãäžçäžã®ãµãŒããŒã«ãã£ãã·ã¥ããããšãæ€èšããŠãã ãããããã«ããããŠãŒã¶ãŒã¯å Žæã«é¢ä¿ãªããŠã§ããµã€ãã«è¿ éã«ã¢ã¯ã»ã¹ã§ããŸãããŸããéçã³ã³ãã³ããçæããéã«ã¯ãç°ãªãã¿ã€ã ãŸãŒã³ãé貚ã«ã泚æããŠãã ããã
9. Web Worker
Web Workerã䜿çšãããšããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãåŠçããã¡ã€ã³ã¹ã¬ãããšã¯å¥ã®ããã¯ã°ã©ãŠã³ãã¹ã¬ããã§JavaScriptã³ãŒããå®è¡ã§ããŸããããã¯ãUIããããã¯ããããšãªãèšç®éã®å€ãã¿ã¹ã¯ãå®è¡ããã®ã«åœ¹ç«ã¡ãŸãã
// main.js
const worker = new Worker('worker.js');
worker.postMessage({ data: someData });
worker.onmessage = (event) => {
console.log('Received data from worker:', event.data);
};
// worker.js
self.onmessage = (event) => {
const data = event.data.data;
// Perform computationally intensive task
const result = processData(data);
self.postMessage(result);
};
äŸïŒ Web Workerã䜿çšããŠããã¯ã°ã©ãŠã³ãã§è€éãªããŒã¿åæãç»ååŠçãå®è¡ããããšã§ãUIã®ããªãŒãºãé²ããããã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã
ã°ããŒãã«ãªèæ ®äºé ïŒ Web Workerã䜿çšããéã¯ãç°ãªãã»ãã¥ãªãã£å¶éããã©ãŠã¶ã®äºææ§ã®åé¡ã«æ³šæããŠãã ãããããŸããŸãªãã©ãŠã¶ãããã€ã¹ã§ã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ãããŠãã ããã
10. ã¢ãã¿ãªã³ã°ãšç¶ç¶çæ¹å
ããã©ãŒãã³ã¹ã®æé©åã¯ç¶ç¶çãªããã»ã¹ã§ããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠããæ¹åãå¿ èŠãªé åãç¹å®ããŸãã
- ãªã¢ã«ãŠãŒã¶ãŒã¢ãã¿ãªã³ã°ïŒRUMïŒïŒ Google AnalyticsãNew RelicãSentryãªã©ã®ããŒã«ã䜿çšããŠãå®éã®ç°å¢ã§ã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã远跡ããŸãã
- ããã©ãŒãã³ã¹ããžã§ããïŒ ããŒãžèªã¿èŸŒã¿æéãæåã®1ãã€ããŸã§ã®æéãªã©ã®äž»èŠãªã¡ããªã¯ã¹ã«å¯ŸããŠããã©ãŒãã³ã¹ããžã§ãããèšå®ããŸãã
- 宿çãªç£æ»ïŒ 宿çãªããã©ãŒãã³ã¹ç£æ»ã宿œããŠãæœåšçãªããã©ãŒãã³ã¹ã®åé¡ãç¹å®ãã察åŠããŸãã
çµè«
Reactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åããããšã¯ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«é«éã§å¹ççããã€é åçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«äžå¯æ¬ ã§ãããã®ã¬ã€ãã§æŠèª¬ããæŠç¥ãå®è£ ããããšã§ãReactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããå Žæãããã€ã¹ã«é¢ä¿ãªãäžçäžã®ãŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ããããã«ããããšãã§ããŸãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåªå ãã培åºçã«ãã¹ãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠããŠæœåšçãªåé¡ãç¹å®ãã察åŠããããšãå¿ããªãã§ãã ããã
ããã©ãŒãã³ã¹æé©åã®åãçµã¿ãã°ããŒãã«ã«äžãã圱é¿ãèæ ®ããããšã§ãé«éã§å¹ççãªã ãã§ãªãã倿§ãªèæ¯ãæåãæã€ãŠãŒã¶ãŒã«ãšã£ãŠå æ¬çã§ã¢ã¯ã»ã¹ããããReactã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãããã®å æ¬çãªã¬ã€ãã¯ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã®ããŒãºãæºãã髿§èœãªReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®ç¢ºåºããåºç€ãæäŸããŸãã