前提として、microCMSのコンテンツAPI(GET)はCDNを経由して、レスポンスが行われます。つきましては、CDNにキャッシュが存在しているか、存在していないかで大きくレスポンスタイムが異なります。
▼ コンテンツAPI(GET)のキャッシュはどのように利用されますか?
https://help.microcms.io/ja/knowledge/how-to-use-content-api-caching
その上で、キャッシュが存在していない場合のレスポンスに時間がかかる場合、以下のような要因が考えられます。
実行負荷の高いクエリを利用している
コンテンツの絞り込み条件の種類によっては、検索の負荷が高く、レスポンスに時間がかかるものがあります。
具体的な条件と対応策は以下の通りです。
- テキストの部分一致による絞り込み(
?filters=hoge[contains]test
)を行っている場合- qパラメータによる検索をご利用ください。
- テキストフィールドやテキストエリアなど、文字列に対して範囲指定(
?filters=hoge[greater_than]100
、?filters=hoge[less_than]200
)を行っている場合 [and]
や[or]
によって、複数の絞り込み条件を組みわせている場合
- リクエストを複数に分割した上で、1リクエストあたりの負荷を減らした上で、呼び出し側で、レスポンス結果をマージしてください。
depthに指定されている数字が大きい
depthパラメータの値を大きくした場合、コンテンツ参照先のデータを取得して、レスポンスに含める挙動となります。コンテンツ参照を利用しているフィールドが多い場合、depthの値を1つ増やすだけでも、取得するコンテンツ量が非常に大きくなるケースがあります。
depthパラメータには必要となるコンテンツまでの深さを設定することで、速度が改善する可能性があります。
1回のコンテンツ取得件数が多い
1回のリクエストで取得するコンテンツ数が多い場合、レスポンスが遅くなることがあります
limitパラメータを利用して、必要なコンテンツ数のみを取得することで、速度が改善する可能性があります。
コンテンツ数、メディア数、フィールド数が多い
データを探索してレスポンスを生成する仕組みのため、CMSに登録されているデータ量の単純増加により、レスポンスが遅くなることがあります。
不要なデータがある場合は、削除操作を行なっていただくことで、速度が改善する可能性があります。
海外からアクセスしている
microCMSのサーバは国内にあるため、国内からのアクセスと比較すると、海外からのアクセスは速度が遅くなる傾向にあります。
SSGのようなアーキテクチャを採用し、ビルド処理を行う場合は、意図せず海外サーバでのビルドを選択しているケースがあります。その場合、国内リーションを選択することで速度が改善する可能性があります。
インターネット回線で輻輳が発生している
microCMSのAPIは、インターネット経由にてアクセスされます。アクセス元からmicroCMSのサーバまでの経路において、輻輳が発生している場合、レスポンスが遅くなる可能性があります。
その場合、traceroute(tracert)コマンドを利用することで、ボトルネックとなっている箇所を特定できる可能性があります。