1. 程式人生 > >《SPA設計與架構》之認識SPA

《SPA設計與架構》之認識SPA

因此 傳統 前言 發現 綁定服務 又一 封裝 函數作用域 決定

原文

  簡書原文:https://www.jianshu.com/p/84323f530223

大綱

  前言
  1、什麽是單頁面應用程序(SPA)
  2、SPA與傳統Web應用的區別
  3、關於SPA的使用
  4、SPA的相關知識
  5、服務器端通信
  6、單元測試
  7、認識自動化工具

前言

  本篇博客以及之後的幾篇關於SPA的博客是本人閱讀過《SPA設計與架構》之後整理的知識,並且針對一些知識點也查找了相關博客,對其有一定的了解。而我也將我對SPA的認識和理解寫出來,希望對讀者能有所幫助。如果有想要深入了解關於SPA的設計理念的話,個人推薦可以去將整本書通讀一下,這樣會對現在的流行的框架有進一步的認識和理解。

1、什麽是單頁面應用程序(SPA)

  1、SPA是一種Web開發方法,整個應用功能都存在於單個頁面中。
  2、在SPA應用中,應用加載之後就不會再有整頁刷新。相反,展示邏輯預先加載,並有賴於內容Region(區域)中的視圖切換來展示內容。
  3、SPA客戶端與服務器端實行異步通信。常用的數據通信格式為JSON文本格式。
  4、MV*框架提供機制,讓SPA應用綁定服務器端請求數據與視圖(用戶所見並與之交互)。
  5、與依賴全局變量和函數不同的是,SPA中的JavaScript代碼通過模塊來組織。模塊提供了狀態和/或數據封裝。模塊還有助於代碼解耦及維護。
  6、SPA的優勢還包括類桌面應用的呈現效果、解耦的表現層、更快速輕量的符合、更少的用戶等待時間以及更好的代碼維護性等。

2、SPA與傳統Web應用的區別

  SPA:無需刷新瀏覽器,將需要操作的DOM的變化放在瀏覽器中,如果頁面需要變化的時候,由操作這些變化的JavaScript(已經加載於瀏覽器中的)來實現操作。
SPA實現的視圖的刷新,是局部子容器(Region)的變化,而不是頁面的重新加載,無重載頁面是單頁面應用程序的關鍵
  1、無需刷新瀏覽器
  2、表現邏輯位於客戶端
  3、服務器端事務處理

3、關於SPA的使用

3.1、使用模塊模式

  利用模塊模式限制變量和函數作用域為模塊自身。避開全局作用域相關的各種陷阱。
  模塊模式結合其他相關技術管理模塊以及其依賴的可行方式,使得程序員能夠借助頁面構架方法來設計大型、健壯的Web應用程序。

3.2、SPA的路由選擇

  為了讓用戶掌握其導航位置,單頁面應用程序通常會在設計中融入路由選擇(Routing)的設計思路:接觸MV*框架或第三方庫的代碼實現,將URL風格的路徑與功能關聯起來。路徑通常看起來像相對URL,其充當用戶導航時到達特定視圖的觸發因素。路由器可以動態更新瀏覽器URL,並允許用戶使用前進和後退按鈕。這就進一步強化了當屏幕某部分變化時會到達新位置的設計理念。

3.3、SPA創建視圖組成與布局

  在單頁面應用程序中,UI由視圖而非新頁面構成。內容Region的創建以及視圖在這些Region中的位置,決定了應用程序的布局。客戶端路由由於連接這些點。所有的這些要素有機結合起來就影響了應用程序的可用性和美感。

3.4、利用MV*框架實現SPA架構

  1、SPA是一種架構理念,是不同於傳統Web實現的一種架構。傳統式的Web架構是前端交互,通過請求服務器獲取處理好的新的HTML文件從而進行頁面的重載刷新,而SPA式的Web架構設計是用戶體驗傾向於原生軟件開發式的,是讓用戶決定我們用的就是一個原生開發式的程序應用,但是這個程序應用又不像軟件一樣需要下載,需要不斷的更新,他就只是一個頁面,通過路由器、AJAX等技術實現這樣的用戶體驗的架構設計。
  2、SPA只是一種架構理念,是想要達到的某種Web應用的體驗。最終實現這樣的程序應用需要用到的技術有很多,諸如路由器、AJAX、客戶端自動化等等的技術。
  3、MV框架就是集成了各種可以實現SPA架構理念的技術的程序集合,這些集合又體現了傳統的MVC、MVP、MVVM等設計模式,但是又不局限於某種設計模式,是多種設計模式的集合體,因此我們稱之為MV框架。

4、SPA的相關知識

4.1、MV*框架

  基於SPA架構理念,很多框架應運而生,這些框架不同程度上的支持了傳統的MVC、MVP、MVVM等設計模式,通過各種不同的技術,如路由器、AJAX實現了SPA架構理念的程序應用,而這些設計模式的框架可以統稱為MV*框架。

4.2、路由器

  傳統Web應用中,每次刷新頁面都是通過請求服務器,獲取到處理好的HTML頁面,進而刷新重載當前HTML頁面。每次的URL的變化都會導致請求的發送,從而刷新頁面,實現展示新的頁面,顯示新的功能的效果。
  但是區別於傳統Web應用,SPA架構理念的Web應用是不應該給人以頁面跳轉的那種效果的,URL的變化雖然同樣會發送請求,但是請求的就不再是整個HTML的頁面,HTML頁面的變化應該是由本地已經加載好的JS來實現的,而發送的請求只是為了數據的加載。
  這樣的URL的變化不同於傳統的URL變化之後產生的影響,因此需要通過路由器這樣的技術實現,從而從傳統的URL路由向客戶端路由轉變,從而實現單頁面導航的效果

4.3、模塊化編程

  也許在MV*框架中的很多知識並不是SPA架構理念應用的實現的最本質的技術,但是通過這些技術可以更好的實現SPA架構理念的Web應用,而模塊化編程便是其中之一。
  通過模塊化編程,可以讓整個Web應用變成一個又一個功能模塊,通過功能模塊的調用從而實現某個視圖的需求。通過URL的變化從而得知需要展示的視圖,不同的視圖調用不同的模塊從而達到功能的實現,這就是模塊化編程的意義,編寫一個個功能模塊,通過路由器的控制,進而通過js實現頁面的變化,通過調用模塊實現功能。

4.4、服務器端通信

  基於異步加載數據的服務器端通信是實現SPA架構理念的Web應用重點之一,因為如果沒有異步的實現,加載數據時程序應用停滯,那麽給用戶的體驗就不可能和所謂原生的無縫對接相類似了

4.5、單元測試

  單元測試是實現代碼更優化的實現途徑之一,通過單元測試可以將一些bug扼殺在最初的時候,避免之後代碼功能實現,但是又由於bug的出現而不得不修改某塊單元代碼,進而又影響到整個功能塊從而不得不重構整個代碼

4.6、客戶端自動化

  客戶端自動化可以簡便程序開發中很多繁雜的工作,讓開發更像一個工程的開發,更智能,更快捷

5、服務器端通信

  服務器端通信的數據類型——互聯網媒體類型
  為了SPA應用客戶端與服務器端間能夠通信,兩端都需要有能夠對上話的共同語言。首要任務就是決定發送與接收數據的類型
  JSON是SPA應用程序與服務器端通信時的常用格式(盡管數據類型可以是從純文本到XML、文件的各種格式)
  盡管使用JSON格式文本作為通用數據交換格式,但它只不過是系統原生對象的表述形式。要讓文本能為我所用,兩端都需要對其進行轉換。
  調用服務器端時,請求可以包括合適的互聯網媒體類型(Internet Media Type,MIME)相關信息,因為資源可用於各種語言及媒體類型。之後服務端就可以相應其認為最合適的某個版本的請求資源。這叫做內容協商(Content Negotiation)。對於JSON,可以為數據交換顯示聲明一種application/json的互聯網媒體類型。

6、單元測試

  從廣義上來說,單元測試指在應用程序的最小可測部分上執行測試。此類測試是在開發階段由開發人員執行的低層次測試。此外,不管測試主體是MV*對象還是一個普通模塊,單元測試通常都會對代碼行為方式進行斷言。
  單元測試還可以通過它與其他類型測試的關系來表述。按照諸如範圍、時間及規模的度量,通常用一個金字塔結構來描述不同測試類型。由於單元測試的關註點和範圍較窄、能夠快速執行並易於管理,而且能夠快速反饋結果,因此其處於金字塔底層。

技術分享圖片

7、認識自動化工具

  在軟件開發中,經常會發現自己再整個開發周期裏不斷重復某些任務。這些任務包括針對給定語言執行特定開發步驟、運行測試以及創建構建過程等。為了實現這些任務的自動化,許多基於任務的自動化工具(或Task Runner)紛紛湧現。
  在現代Web應用程序中,如我們的SPA應用程序,JavaScript專業人員需要的不僅僅是一個構建工具。當代開發人員面臨的現實相當繁雜,同時要求Task Runner能夠自動化面向開發的大量任務。

《SPA設計與架構》之認識SPA