一、定義
單頁 Web 應用 (single-page application 簡稱為 SPA) 是一種特殊的 Web 應用。它將所有的活動局限於一個Web頁面中,僅在該Web頁面初始化時加載相應的HTML、JavaScript 和 CSS。一旦頁面加載完成了,SPA不會因為用戶的操作而進行頁面的重新加載或跳轉。取而代之的是利用 JavaScript 動態的變換HTML的內容,從而實現UI與用戶的交互。由於避免了頁面的重新加載,SPA 可以提供較為流暢的用戶體驗。
二、優缺點
單頁Web程序的出現是富客戶端發展的必然結果,但是該技術也是有些局限性,所以采用之前需要了解清楚它的優缺點。
1、優點:
1).良好的交互體驗
用戶不需要重新刷新頁面,獲取數據也是通過Ajax異步獲取,頁面顯示流暢。
2).良好的前后端工作分離模式
單頁Web應用可以和RESTful規約一起使用,通過REST API提供接口數據,並使用Ajax異步獲取,這樣有助於分離客戶端和服務器端工作。更進一步,可以在客戶端也可以分解為靜態頁面和頁面交互兩個部分。
3).減輕服務器壓力
服務器只用出數據就可以,不用管展示邏輯和頁面合成,吞吐能力會提高幾倍;
4).共用一套后端程序代碼
不用修改后端程序代碼就可以同時用於Web界面、手機、平板等多種客戶端;
2、缺點:
1).SEO難度較高
由於所有的內容都在一個頁面中動態替換顯示,所以在SEO上其有着天然的弱勢,所以如果你的站點對SEO很看重,且要用單頁應用,那么就做些靜態頁面給搜索引擎用吧。
2).前進、后退管理
由於單頁Web應用在一個頁面中顯示所有的內容,所以不能使用瀏覽器的前進后退功能,所有的頁面切換需要自己建立堆棧管理,當然此問題也有解決方案,比如利用URI中的散列+iframe實現。
3).初次加載耗時多
為實現單頁Web應用功能及顯示效果,需要在加載頁面的時候將JavaScript、CSS統一加載,部分頁面可以在需要的時候加載。所以必須對JavaScript及CSS代碼進行合並壓縮處理,如果使用第三方庫,建議使用一些大公司的CDN,因此帶寬的消耗是必然的。
三、框架AngularJS
AngularJS是一個 MV* 框架,最適於開發客戶端的單頁面應用。它不是個功能庫,而是用來開發動態網頁的框架。它專注於擴展HTML的功能,提供動態數據綁定(data binding),而且它能跟其它框架(如jQuery)合作融洽。
如果你要開發的是單頁應用,AngularJS就是你的上上之選。Gmail、Google Docs、Twitter和Facebook這樣的應用,都很能發揮AngularJS的長處。但是像游戲開發之類對DOM進行大量操縱、又或者單純需要極高運行速度的應用,就不是AngularJS的用武之地了。
優點:
1、具有桌面應用的即時性、網站的可移植性和可訪問性。
2、用戶體驗好、快,內容的改變不需要重新加載整個頁面。
3、基於上面一點,SPA相對對服務器壓力小。
4、良好的前后端分離。SPA和RESTful架構一起使用,后端不再負責模板渲染、輸出頁面工作,web前端和各種移動終端地位對等,后端API通用化。
5、同一套后端程序代碼,不用修改就可以用於Web界面、手機、平板等多種客戶端;
缺點:
1、不利於SEO。(如果你看中SEO,那就不應該在頁面上使用JavaScript,你應該使用網站而不是Web應用)
2、初次加載耗時相對增多。
3、導航不可用,如果一定要導航需要自行實現前進、后退。