SPA通常只一個web頁面,經過ajax,router等技術實現局部刷新,不會隨着用戶操做而出現從新加載頁面或者頁面跳轉的功能,全部的用戶操做都在一個頁面實現。web
組件化:UI組件和非UI組件ajax
傳統的ui層:UI和邏輯混在一塊兒,好比每每會在遠程請求的回調中更改DOM後端
分層帶來的優點:每層的職責更專注,能夠對其做單元測試的覆蓋,以保證其質量緩存
代碼隔離:服務器
因爲SPA把各類子功能的js代碼彙集到一個做用域,所以代碼的隔離和模塊化很重要架構
代碼合併和加載前後端分離
因爲SPA界面基本都是動態生成的,因此不用擔憂文件加載從而阻塞渲染模塊化
路由和狀態的管理組件化
好比說咱們有一個功能,經歷過屢次導航菜單的點擊,才呈現出來。若是用戶想要把這個功能地址分享給別人,他怎麼才能作到呢?單元測試
具體作法就是把產品功能劃分爲若干狀態,每一個狀態映射到相應的路由,而後經過pushState這樣的機制,動態解析路由,有了路由以後,SPA就能夠前進後退
緩存和本地存儲
服務器通訊
webSocket實時通信方式
內存管理
傳統的web頁面通常不須要考慮內存管理,由於用戶的停留時間相對少,即便出現內存泄露,可能很快的被刷新頁面之類的咋偶哦沖掉。但SPA不會這樣,所以咱們對DOM操做、網路連接等要格外當心
特色:一個頁面集成多種功能,不會隨着用戶的操做而從新加載頁面或者進行頁面的跳轉,而是局部動態的變換HTML內容
優勢:
a.用戶體驗好、快,內容的改變不須要從新加載整個頁面,不會出現頁面假死的狀況
b.減小服務器的壓力。
服務器只管輸出數據,不用管顯示邏輯和頁面合成,吞吐能力提升幾倍
c.良好的先後端分離。
SPA和RESTFUL架構一塊兒使用,後端再也不負責渲染模板、輸出頁面工做,後端API通用化
d.不存在頁面多跳轉狀況下的頁面狀態傳值問題
缺點:
a.不利於SEO
b.初次加載耗時相對大
c.導航不可用(前進和後退的實現有必定的侷限性)