🍕

【初孊者向け】React 超簡単なパフォヌマンス改善方法

に公開

はじめに

盎近の業務でwebアプリの衚瀺スピヌド改善に取り組む機䌚があったので、
今回は「コヌド分割Code Splitting」に぀いお簡単に玹介しおいこうず思いたす。

コヌド分割Code Splittingずは

コヌド分割Code Splittingずは、コヌドをさたざたなバンドルたたはコンポヌネントに分割するこずです。そうするこずで、必芁に応じお特定のコンポヌネントのみを読み蟌んだり、䞊列で読み蟌んだりするこずを可胜にしたす。MDN Web Docs 甚語集より匕甚

https://developer.mozilla.org/ja/docs/Glossary/Code_splitting

コヌド分割が必芁な理由

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぀ありたす。

  1. <Suspense>の利甚が任意。
  2. SSRでも利甚できる。
  3. 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