Single Page Application 又稱為 SPA,意即僅有一個頁面的應用程式,我們可以透過這樣的網頁設計機制,動態更新同一頁面的資料來與使用者互動,不過頁面不會重新載入;與之對應的概念是 Multiple Page Application,縮寫為 MPA,是一個具有多個頁面的應用程式,與傳統的靜態頁面一樣,每當使用者與應用程式互動都需要重新載入頁面。
我們常常在用的 Gmail 和 Google Docs 也是運用 SPA 的機制。 使用 Gmail 或 Google Docs 的時候,全部的執行動作是在「同一個頁面」上面發生的,所以載入的檔案從頭到尾都只有一個 index.html;程式面的運作方式,是你在使用這些服務的時候,會透過 Ajax 發 request 給 server,接著 server 回傳資料之後,在 client 端,透過 JavaScript 把畫面渲染出來。
####自我補充: Ajax( Asynchronous JavaScript and XML),中文直譯為:非同步的 JavaScript 與 XML 技術。我們可以在 JavaScript 裡面透過非同步去呼叫 Server 的 API,並把資料拿回來;在 Ajax 出現之前,你要把資料帶過去都必須透過 Form 的方式,一定要換頁。可是有了 Ajax 以後,不換頁也能跟 Server 溝通。
###SPA的優點: 線性使用者體驗: 先前提到 SPA 利用了 Ajax 來更新網頁的部分資料,減去了先前必須要整個網頁頁面重新載入的困擾,使用者除了不必一直跳轉頁面,也提供給使用者較好的體驗。
前端和後端的權責清楚:前後端分離的設計模式,後端負責 Server 端資料跟 API 的提供;前端負責 Client 端頁面的呈現,這樣的分工,也讓前後端有更好的職責區分,開發團隊可以同時開展前端和後端工作。
不利於 SEO (搜尋引擎最佳化): 由於網站的內容是由前端的 JavaScript 動態產生的,當 server 回覆 Response 回來,執行 JavaScript 才會動態產生出內容,所以當我們打開 SPA 的網站,打開網頁原始碼觀看會是空的。雖然 Google 的爬蟲很強大,可以支援執行 JavaScript,但還是有其他的搜尋引擎,若是碰到用 SPA 的網站,也會影響到 SEO 的排名。
初次載入頁面較慢: 當我們首次載入網頁時,雖然只看到一個頁面,但卻必須先載入整個 JavaScript 的程式或是其他頁面的 template,瀏覽器在依據網頁來呈現所需畫面,對於網頁的效能多少會有影響。
先前只透過 PHP 來撰寫的留言板,由於我們都將 PHP 程式碼、商業邏輯跟 HTML 混在一起寫,易讀性差,不容易維護,在 debug 的時候也增加了難度,當時還想著,難道自己要往全端工程師邁進了嗎?(真的想太多 XD)
這一週的作業讓我們體會到 SPA,透過 JavaScript 非同步去呼叫也是自己寫出來的 Server 的 API,接著動態新增頁面。這樣的流程改善了之前只用 PHP 程式碼遇到的困擾,也深切感受到前端在近代,為了提升使用者的體驗,需要接觸更多新技術及新解法,才能打造更好的產品。