一、什么是單頁應用?
從字面上來理解:
單頁面應用(SPA--------single page application),一個web項目只有一個頁面(即一個HTML文件);一個項目的所有頁面的所有內容被分成了很多的小塊(即組件),可以重復利用的,可以任意調整的組件,每個組件就是一個獨立的部分(包括html,css和javascript代碼)。
從使用的過程來理解:
單頁面應用指一個系統只加載一次資源,然后下面的操作交互、數據交互是通過router、ajax等來進行,頁面並沒有刷新,頁面只在最開始前刷新一次。
二、單頁應用的優缺點
要說單頁應用的優點之前,得提一下多頁應用的缺點,因為將它倆進行比較,更容易理解。
多頁應用就是以前傳統的web開發。有了單頁面應用,才把以前的傳統web開發叫作多頁面應用。
多頁面應用的缺點:每次進入新的頁面,都需要向服務器發送請求,即需要整個頁面的所有代碼。而且,多次操作后,再次進入該頁面時,還得再次請求。不但浪費了網絡流量,更重要的是有延遲,用戶友好性,用戶體驗不好。
1.優點
而單頁應用則是一次性把web應用的所有代碼(HTML,JavaScript和CSS)全部請求過來,有時候考慮到首屏加載太慢會按需加載。這樣一來,以后用戶的每一個動作都不會重新加載頁面(即不用再問服務器要頁面的HTML,css和js代碼),取而代之的是利用 JavaScript 動態的變換HTML的內容(這不需要和服務器交互,除非數據是動態,那么只需要問服務器要數據即可)。
單頁應用優點的小小總結:
1.分離前后端關注點,前端負責界面顯示,后端負責數據存儲和計算,減輕服務器壓力,服務器只用出數據就可以,而且不會把前后端的邏輯混雜在一起;
2.API共享,后端API通用化,服務如果是多端的(瀏覽器端、Android、iOS、微信等),單頁應用的模式便於你在多個端共用 API,可以顯著減少服務端的工作量;
3.用戶體驗好、快,內容的改變不需要重新加載,提升了用戶體驗;
4.前端組件化,前端開發不再以頁面為單位,更多地采用組件化的思想,代碼結構和組織方式更加規范化,便於修改和調整。
2.缺點
單頁應用缺點的小小總結:
1.首次加載耗時較多,需加載大量的資源
2.導航不可用,由於單頁Web應用在一個頁面中顯示所有的內容,所以不能使用瀏覽器的前進后退功能
3.對搜索引擎(SEO)不友好
原因:單頁應用實際是把視圖(View)渲染從Server交給瀏覽器,Server只提供JSON格式數據,視圖和內容都是通過本地JavaScript來組織和渲染。而搜索搜索引擎抓取的內容,需要有完整的HTML和內容(搜索引擎只認識html里的內容,不認識js的內容)單頁應用架構的站點,並不能很好的支持搜索,會導致單頁應用做出來的網頁在百度和谷歌上的排名差。
三、單頁應用缺點的解決方案
1.按需加載:按照當前呈現的不同頁面加載不同的文件,而不是最開始就把所有文件都加載出來,從而避免首屏加載很慢。
當首屏加載完畢后,設備&網絡處於空閑狀態,可以對其他路由組件進行預加載,以便提升頁面切換性能。
根據路由拆分減少初始加載體積,利用異步加載方式,在路由注冊時提供異步拉取組件的方法,僅在需要進入對應路由時,對應組件才會被加載進來。
2.緩存+懶加載:有一些方法可以加快單頁應用的初次加載速度,比如采用多項緩存措施、需要時再加載某些模塊(懶加載)
3.配置好路由信息:通過記錄瀏覽過的歷史路由信息,可以很好的記錄或歷史查看過的界面,有效解決導航不可用的問題
4.用 #!號代替#號:搜索引擎抓取頁面首先要遵循http協議,可是#不是協議內的內容。而實際上也是這樣,我們沒有見過搜索引擎的搜索結果中,哪一條記錄可以快速定位到網頁內的某個位置的。解決的方法是用 #!號代替#號,因為谷歌會抓取帶有#!的URL。我們可以解決ajax的不被搜索引擎抓取的問題。