SPA(シングルページアプリケーション)とは

はじめに

以前React.jsで開発していた際に、SPAについて調べる機会がありましたので、記載していきます。

SPAとは

「単一ページでアプリケーションを構成すること」
なんだかよくわかりませんね。。。。

まずは従来のアプリケーションとSPAを比較してみましょう。

◇従来のアプリケーション
image.png
 1.ユーザ操作
 2.サーバーにリクエスト
 3.サーバーでWEBページを生成
 4.クライアント側へWEBページを送信
 5.サーバーから受け取ったWEBページを描画

特徴
ユーザがリクエストする度にWEBページ全てが読み込まれることです。

◇SPA
image.png
 1.初期ページ読み込み(初期描画)
 2.ユーザ操作
 3.サーバーにリクエスト
 4.サーバーからクライアント側へ差分データを送信
 5.差分のみを更新

特徴
最初のリクエストのみWEBページ全体を読み込む
その後は差分データ(JSONなど)を受け取りJavaScriptで必要な場所だけを更新する
※従来のものと違い、毎回ページ全体の更新をする必要がなくなる

要するにSPAでは、ページ全体をロードするのは初回のみで
それ以降は、JavaScriptで差分のみを更新するということ。

これが「単一ページでアプリケーションを構成すること」とどうつながるのかというと、
一つのHTMLに対してJavaScriptを用いて更新しているというのがポイントです。

※おまけ
 SPAを作成できるフレームワークとして「React」「Vue」などがあります。
 これらは「仮想DOM」を用いて差分更新を実現しています。よければ調べてみてください。

SPAのメリット/デメリット

◇メリット
・画面全体のロードが最初の描画のみなので、通信負荷や通信容量が削減されて画面表示の高速化につながる
・画面を表示したまま、コンテンツの変更が可能になる
 (更新対象のみを変更するので「待ち」ストレスが無くなる)
・サーバー側でWEBページを生成する必要がなくなり、クライアント側とサーバー側が疎結合になる

◇デメリット
・初期ページを読み込むのに時間がかかる
  JavaScriptの記述量が増えるため、初期描画に時間がかかる
・開発の複雑化
  表示側の多くをJavaScriptで制御する必要があるため  

以前感じていた疑問

SPAとして作ったアプリケーションでもボタン押下等のアクション後にURLが変更され、
画面遷移しているのではと思ったことはないでしょうか。

あれは動的にURLをJavaScriptで変更し、画面の一部を更新しているだけで
擬似的な画面遷移を実現しているのです。
(ユーザ目線では画面遷移しているように見える。)

例として簡単にあげます
Vue.jsでは「vue-router」を使用して、動的にURLを変更しています。
(一部抜粋)

<template>
  <div>
    <p>テスト</p>
    <router-view/>
  </div>
</template>

「router-view」と記載されている箇所のみがURLによって
動的に「component」(画面のパーツのようなもの)を切り替えています。

なので画面の一部がURLによって更新されているということです。

まとめ

SPAはユーザへのストレスを減らし、UXをより良いものにしてくれると思います。
そのためにもちゃんと理解をして実装をする必要があります。

ここまでずっとSPAを推しましたが、なんとなくSPAを選んだではダメです。
一つの手段にすぎないため、自分の知識を深め最適かどうかを判断することも重要です。
(自分にも言い聞かせてます。。。。。。。。)

参考文献

SPA(Single Page Application)の基本 - Qiita
SPA(Single Page Application)って何? 単一ページで構成されるWebアプリケーション JavaScriptでDOMを操作しページを切り替える AjaxやWebSocketを使用する SPAま...
タイトルとURLをコピーしました