[VUE]SPAウェブフロントエンド開発ためのまとめ

<!-- wp:paragraph -->
<p><sub>・出典：<a href="https://ko-dev-jp.com/2020/11/17/spa-web-vue-jp/">[VUE]SPAウェブフロントエンド開発ためのまとめ</a></sub><br><br></p>


<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>目標</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>本ポスティングではSPA<sub>Single Page Application</sub>開発に先立ってSPAについての理解およびJavaScriptのフレームワーク「Vue」に対する基本的な理解を目指したいと思います。MPAウェブサービスやMVCパターンに対する基本的な理解を元に作成することになりました。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>目次</h2>
<!-- /wp:heading -->

<!-- wp:list {"ordered":true} -->
<ol><li>JavaScript Frameworkの使用背景</li><li>MPAからSPAまで</li><li>SPAルーティングに対して<br>①Link方式<br>②Ajax方式<br>③Hash方式</li><li>JavaScript Frameworkの主な活用の要素</li><li>VUE</li><li>主要ライブラリ<br>①VUE Router<br>②VUE CLI<br>③Vuex<br>　(1)Stateとは<br>　(2)State管理の必要性<br>　(3)構成要素<br>　(4)State、Getters、Actions、Mutaitions<br>　(5)レンダリングパフォーマンスについて</li><li>まとめ</li></ol>
<!-- /wp:list -->

<!-- wp:heading -->
<h2><br><br><br>1. JavaScript Frameworkの使用背景</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>JavaScriptのフレームワークが登場する前には、vanilla JSやjQuery<sup>*1</sup>をフロントロジックで活用して具現しました。JavaScriptフレームワークはフロントエンドの開発が複雑化によって登場することになりました。<br><br>JavaScriptフレームワークを活用すると、SPA<sub>(Single Page Application)</sub><strong><sub><sup>*2</sup></sub></strong>など高級ウェブアプリケーションを開発するのにもっと容易します。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong><sup>*1</sup>&nbsp;<sub>jQuery</sub></strong><sub>：簡単にDOMを操作するためのライブラリ</sub><br><strong><sup>*2</sup><sub>SPA</sub></strong><sub>：単一ページのアプリケーション(Single Page Application)の形でウェブを開発することを意味、詳しい内容は2番を参考</sub></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>2. MPAからSPAまで</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>既存のMPA<sub>(multiple-page application)</sub>ウェブサービスは、クライアントのリクエスト<sub>request</sub>がある際ごとにサーバからリソース<sub>resource</sub>とデータを受け取って、画面に新たにレンダリング<sub>rendering</sub>をするやり方でありました。 リンク<code>&lt;a href="#"&gt;</code>をクリックすると、該当ページに移動することになり、明示されている資源をサーバーに要請して回答を受けてきます。<br>このように、MPA方式は各ページごとにサーバ側でhtml文書を要請するために重複されるデータを受け取るしかありませんでした。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>一方、SPAウェブサービスは、上記のような既存のウェブサービスの限界を補完します。 最初のロード時、全体ページをロードした後からは、既存のページと比較して更新が必要な特定の部分だけをjsonの形でデータを持ってきてバインディング<sub>binding</sub>します。<br>したがって、SPA方式はAjax<sub>(3番参照)</sub>にデータを持って来てから必要な部分だけ更新するようにJavascriptを作成します。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>3. SPAルーティングに対して</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><br><br><strong>*ルーティング<sub>(Routing)</sub>とは。<br></strong>データを送ることが最適の経路を選択する過程で、与えられたデータを最適化された形でやり取りできる経路を選択する過程です。<br><br></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>①リンク方式(伝統的方式)</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>リンク方式は下記の過程を含んでいます。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>(1) link tag(<code>&lt;a href="#"&gt;</code>)のクリック<br>(2) URLのpathにhref属性<sub>attribute</sub>値であるリソースの経路が追加<br>(3) ブラウザのアドレスバーにpath値を表示<br>(4) 該当リソースをサーバに要請</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>クライアント側で(1)~(4)を経ることになると、<strong>サーバ側からでは完全なリソースをhtmlの形で回答</strong>します。 また、ブラウザ側ではこのhtmlを受けてレンダリングします。 前のページから新たに受けたページまで転換するやり方は、全体のページを再びレンダリングする方式であります。それで、リロード<sub>reload</sub>が発生してヒストリー<sub>history</sub>が残り、前のページに戻ることができます。 この時、クライアントのリクエストごとに重複されたHTMLとJavaScript、CSSについてももらってこなければならないので、パフォーマンスにあって損害がある可能性があります。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":1157,"linkDestination":"custom","className":"is-style-default"} -->
<figure class="wp-block-image is-style-default"><img src="https://kodevjpcom.files.wordpress.com/2020/08/web-service-routing-traditional-1.jpg?w=836" alt="" class="wp-image-1157"/><figcaption><br><sub>出典:<a href="https://docs.microsoft.com/en-us/archive/msdn-magazine/2013/november/asp-net-single-page-applications-build-modern-responsive-web-apps-with-asp-net">ASP.NET–Single-Page Applications</a></sub>&nbsp;<sub>/</sub>&nbsp;<sub>伝統的なページ寿命周期</sub></figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>②AJAX方式</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>これを補完するため、JavaScriptで非同期<sub>Asynchronous</sub>にサーバとブラウザがデータを交換できる通信方式を活用することになり、この通信方式をAJAX<sub>Asynchronous JavaScript and XML</sub>と言います。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>ページでアップデートが必要な部分だけをロードした後に更新して、リロードしなく不必要なリソースの重複要請を防ぐするので、パフォーマンスにあってもっと優れています。<strong>データ部分が空白であるhtmlをサーバーから受け取って、ページロード時JavaScriptでデータを持ってきて満たして入れます。</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":1158,"linkDestination":"custom","className":"is-style-default"} -->
<figure class="wp-block-image is-style-default"><img src="https://kodevjpcom.files.wordpress.com/2020/08/web-service-routing-spa-1.jpg?w=837" alt="" class="wp-image-1158"/><figcaption><br><sub>出典:<a href="https://docs.microsoft.com/en-us/archive/msdn-magazine/2013/november/asp-net-single-page-applications-build-modern-responsive-web-apps-with-asp-net">ASP.NET–Single-Page Applications</a></sub>&nbsp;<sub>/SPA寿命周期</sub></figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>この時、AJAXはURLを変更させないので、アドレスバーの住所が変更されません。 これは<strong>ブラウザの履歴<sub>history</sub>を<strong>管</strong>理することができないし、前のぺーじでもどることもできないこと</strong>を意味します。 (このほかにもSEOに対してもよくないです。)</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>③HASH方式</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>上のAJAXを補完するため、登場したクライアントルーティング方法がHashです。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Hash方式は、Anchor Tagを使う方式で、link tag(<code>&lt;a href="#hash"&gt;</code>など)のhref属性にhash(<code>#</code>)を使用します。 クリックする際に文書で<code>#</code>の後に付けているidを持った要素に移動します。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>同一のURLでHashが変更された場合<br>ブラウザ側ではこれをURLが変わったものと認識するが、実際にクライアント側でサーバ側にリクエストを送ったりはしません。 Anchorでウェブページの内部での移動を向けたものだからです。<strong>要請をしないため、ページの更新はありませんが、ページがそれぞれの固有のURLを持つので、ヒストリー<sub>history</sub>を管理することができます</strong>。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>上記の3つの方式のほか、PJAX<sub>(html5 pushState+ajax)</sub>もあります。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>4.Javascript Frameworkからの主な活用点</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>ルーティング<br>:公式的なルーティングライブラリが提供されています。</li></ul>
<!-- /wp:list -->

<!-- wp:list -->
<ul><li>テンプレート<br>:レンダリングされたDOMの上に基本インスタンスのデータを宣言的にバインディングがすることができるHTML基盤テンプレート言語を使えます。<br><sub>(この部分はdJangoとも似ていたと思います）</sub></li></ul>
<!-- /wp:list -->

<!-- wp:list -->
<ul><li>コンポーネントの再利用<br>WebコンポーネントはWebページとWebアプリケーションの間でカプセル化された再使用ができるHTMLタグを生成することができます。<br><br></li></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2>5.VUE</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>仮想DOMを活用できるし、DOMを使って全ての要素をリアルタイムでの反応型コンポーネントで製作することができるJavascriptフレームワークです。 通常、プロジェクトの規模が大きくなるほど、様々な形のコンポーネントが生成されるために、これを管理するのに役立つルーティング管理およびグローバル状態を管理するライブラリなどを提供します。</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li><a href="https://jp.vuejs.org/v2/guide/comparison.html">他のフレームワークとの比較</a>(公式ドキュメント)<br><br></li></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2>6.主要ライブラリ</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>①VUE&nbsp;Router</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Vueを利用してSPAウェブを構築する際には、ルーティング制御を向けた公式プラグインです。</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>VueRouterを利用してURL・ヒストリーを管理することができます。</li><li>ブラウザで<code>뒤로 가기</code>及び<code>앞으로 가기</code>動作をできるようにしており、これは使用性を向上させることができます。</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><strong>[ルーティングを定義する形式]</strong></p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted"><strong>//views/Home.vue(テンプレートの構成要素)</strong>&lt;template&gt;
  &lt;div class="<strong>home</strong>"&gt;
    &lt;h1&gt;Home&lt;/h1&gt;
  &lt;/div&gt;
&lt;/template&gt;</pre>
<!-- /wp:preformatted -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted"><strong>//src/router.js(ルーティング定義)</strong>import  Vue  from  ' vue ' 
import  Router  from  ' vue-router ' 
import  Home  from  ' ./views/ '

Vue . use ( Router )

export  default  new  Router ({ 
  mode :  ' history ' , 
  routes :  [ 
    { 
      path :  ' / ' , 
      name :  ' home ' , 
      component :  <strong>Home</strong>} 
  ] 
})</pre>
<!-- /wp:preformatted -->

<!-- wp:paragraph -->
<p>以後、リンクと定義する際には、テンプレートの下記のような構文を挿入して使用することができます。</p>
<!-- /wp:paragraph -->

<!-- wp:preformatted -->
<pre class="wp-block-preformatted">&lt;router-link to="/"&gt;Home&lt;/router-link&gt;</pre>
<!-- /wp:preformatted -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>②VUE&nbsp;CLI<sub>Command Line Interface</sub></h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Vue-cliにコマンドを実行すると、cliが自動的に最適化された、プロジェクトの基本骨格を生成します。 だけでなく、下記の設定が可能です。</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>Vueプロジェクト生成</li><li>Vueライブラリ管理</li><li>Vueの配布ファイルの設定:最適化されたWebpack<sup>*1</sup>形の結果物を生成します。</li><li>Vue GUI提供</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><br><br><sup>*1</sup><sub><strong>Webpack</strong>:JS、CSS、イメージを一つのJSファイルで縛りつけられるモジュールです。 開発者が作成したJSとプロジェクト内の必要なライブラリをロードするJS、作成したCSSファイルとイメージファイルまで整理することができます。 イメージファイルの場合、DataURI(Base64形式)に変換してJSファイルに整理します。</sub><br><br><sup>*dJangoでプロジェクトを生成して、ライブラリを管理して、配布時に静的ファイル管理を提供したものと類似した感じ</sup></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>③Vuex</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Vueコンポーネントで活用することがデータを管理することを目的とする、ステート<sub>State</sub>管理ライブラリです。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5>1)<strong>State</strong>とは</h5>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><sub>*公式文書でstateデータ管理を状態のパターンに翻訳をしておいて、多くの部分がこんがらがったところ(デザインパターン中にステートパターンを融合させたと)で、mutationも各翻訳によって言葉が異なりました。開発をある程度進行した後、もっと確実に定義することができました。</sub></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>すべてのクライアント側のコンポーネントで共通的に使えるように選び出したクライアント用データです。 一般的にクライアント側にデータを渡すためには、サーバーからデータを受け取ってこなければならないという煩わしさがあります。 Stateを使う場合、サーバから最初持ってきたデータをStateに保管します。 以降、必要な部分に対するデータだけ取り出して使うことになります。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5><strong>2)State管理の必要性</strong></h5>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>MVCパターンの複雑なデータフロー問題は、大規模なアプリケーション開発の際MVCパターンで発生する構造的間違いを引き起こします。 複雑な画面とデータの構成が必要したときControllerに多数のModelとViewが縺れてからです。 したがって、既存のMVC間の依存性を除去することが難しくなって、これは機能追加やアップデート時に起きる問題点を解決する複雑にします。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Vuexは、コンポーネント間のデータ伝達を<code>View</code>、<code>Action</code>、<code>State</code>に明示的に表現して、よりデータの流れを単純に維持します。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5><strong>3)</strong>構成要素</h5>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Vuex構成要素は<code>&nbsp;View, Actions, State</code>になります。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br><br><br><strong>[例示]</strong></p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":1297,"linkDestination":"custom","className":"is-style-default"} -->
<figure class="wp-block-image is-style-default"><img src="https://kodevjpcom.files.wordpress.com/2020/08/vuex.jpg?w=556" alt="" class="wp-image-1297"/><figcaption><br><sub>出典:<a href="https://vuex.vuejs.org/">https://vuex.vuejs.org/</a>(vuex公式文書)</sub></figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>(1)ユーザが<code>&nbsp;View(Template)</code>でボタンをクリック<br>(2)<code>Actions(Method)</code>でメソッド呼び出して動作<br>(3)<code>Action</code>s実行してから<code>State(data)</code>を変更</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Viewは、クライアントの方に表示されるTemplateを意味します。 クライアント側でViewを通じてデータ保存などの動作を要請すると、要請によって<code>Actions</code>ではバックエンド側と要請や応答を交換するようになります。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><code>State</code>の場合、クライアントの操作に必要なデータを共有します。<code>Actions</code>を通じてバックエンドAPIを呼び出して要請に即したデータをもらって来たら、コンポーネント間で当該データをすべて共有できるように<code>State</code>に保存します。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>各コンポーネントでは<code>State</code>にプロジェクトで共通に共有するデータを保存しておくことができ、最初の保存だけでどのコンポーネントでも当該データを照会することも、修正することもできます。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>(4)State、Getters、Actions、Mutations</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li><strong><strong>State</strong></strong><br>すべてのコンポーネントで同一のデータを使用できるように共通的な変数を宣言します。</li></ul>
<!-- /wp:list -->

<!-- wp:list -->
<ul><li><strong>Getters</strong><br>コンポーネント内で<code>State</code>に特定処理を進めた後、コンポーネントにバインディングする場合、<code>Getters</code>に該当ロジックを定義した後、各コンポーネントで呼び出すことができます。<br>（例）<code>State</code>に含まれるすべてのデータのうち、特定のデータだけを持ってくる場合</li></ul>
<!-- /wp:list -->

<!-- wp:list -->
<ul id="block-9968b675-4f5b-4104-9a73-feb62c8ccda0"><li><strong>Actions</strong><br>回答を受け取ってくる部分のタームが一定しない場合などの大気が必要でない非同期ロジックが入っている処理を作成します。</li></ul>
<!-- /wp:list -->

<!-- wp:list -->
<ul><li><strong>Mutations</strong><br><code>State</code>に存在する変更するロジックを作成し、<code>State</code>の値を変更させることは<code>Mutations</code>中でのみ変更されなければなりません。<br><br>しかし、開発者が<code>Mutation</code>乙直接呼び出す場合はなく、<code>State</code>を変更する<code>commit</code>背中のメソッドを使用するなどの方法で間接的に使用することになります。<br><br><code>Mutation</code>の場合、各コンポーネントで<code>State</code>を変更した履歴を確認することができます。 各変更件について一つ一つ同期的に処理し、全ての履歴を残すので、お互いに違うコンポーネントで<code>State</code>を変更しても衝突がありません。<br><br><br></li></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":5} -->
<h5>(5)レンダリングパフォーマンスについて</h5>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><br>Vueの<code>getters</code>の場合、使用するたびに、毎回演算処理が入っている方式であるため、多くの量のデータを処理する場合には性能が急激に低下する現象がありました。 コンポーネントから呼び出すデータの数(row基準)が3000件ほどになる時、普段、秒当たり60フレームの性能を見せてくれましたが、たくさんの量のデータを毎回gettersから読んでくると、毎秒2フレームになって最後にはブラウザーが止まってしまいました。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":2134,"className":"is-style-default"} -->
<div class="wp-block-image is-style-default"><figure class="aligncenter"><img src="https://kodevjpcom.files.wordpress.com/2020/11/ko-dev-jp-rendering2-1.png?w=427" alt="" class="wp-image-2134"/><figcaption><br><sub>フレームの低下現象が持続される区間</sub></figcaption></figure></div>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>このような現象を改善するため、一番目には<code>state</code>に読んでくることをなくして、サーバー側のapiを利用して必要な部分だけを直接読んでくる形で作成しました。<code>state</code>を通じず、サーバーから直接持ってくるのでサーバー側と連動に間する時間だけかかり、コンポーネントをレンダリングするのは、多くの時間がかかりませんでした。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>二番目には、該当コンポーネントにページネーションを追加をしました。 最初のデータはすべて読んできた後、クライアント側でページングを処理する形だったためにフレームの低下には大きな役に満たなかったが、ブラウザーが実行中断になってしまう現象が消えました。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><br></p>
<!-- /wp:paragraph -->

<!-- wp:image {"align":"center","id":2135,"className":"is-style-default"} -->
<div class="wp-block-image is-style-default"><figure class="aligncenter"><img src="https://kodevjpcom.files.wordpress.com/2020/11/ko-dev-jp-rendering-1.png?w=425" alt="" class="wp-image-2135"/><figcaption><br><sub>同じページを二回呼んだときの現象。確かに以前よりフレームの低下区間が短くなったし、落ちる幅も減少した</sub></figcaption></figure></div>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p><br><br></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>7.まとめ</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><br></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>VUEはSPA開発向けのJavascriptフレームワークの一つであります。</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>SPA<br>SPAウェブは、最初のロード時、全体ページをロードした後からは、既存のページと比較して更新が必要な部分だけをjsonの形でデータを持ってきてバインディング<sub>binding</sub>します。<br><br><br></li><li>Vue.jsでウェブを開発する際には、プロジェクトの構築及びその他の作業に役に立つ<code>Vue-Cli</code>、ルーティングを担当する<code>Vue Router</code>、コンポーネント間のState管理を担当する<code>Vuex</code>を使います。<br><br><br></li><li>Routing<br>SPAウェブの使用性限界を補完するためには、ルーティングに関するライブラリを利用してヒストリーを管理する必要があります。<br><br><br></li><li>State管理<br>各コンポーネントでは<code>State</code>にプロジェクトで共通に共有するデータを保存しておくことができ、最初の保存だけでどのコンポーネントでも当該データを照会することも、修正することもできます。</li></ul>
<!-- /wp:list -->