Vue SPA單頁(yè)面的應(yīng)用和對(duì)比
一、什么是SPA
- SPA(single-page-application)就是單頁(yè)應(yīng)用。
- 它通過(guò)動(dòng)態(tài)重寫(xiě)當(dāng)前頁(yè)面來(lái)與用戶(hù)交互,這種方法避免了頁(yè)面之間切換打斷用戶(hù)體驗(yàn)在單頁(yè)應(yīng)用中,所有必要的代碼(HTML、JavaScript和CSS)都通過(guò)單個(gè)頁(yè)面的加載而檢索,或者根據(jù)需要(通常是為響應(yīng)用戶(hù)操作)動(dòng)態(tài)裝載適當(dāng)?shù)馁Y源并添加到頁(yè)面頁(yè)面在任何時(shí)間點(diǎn)都不會(huì)重新加載,也不會(huì)將控制轉(zhuǎn)移到其他頁(yè)面。
- 熟悉的JS框架如react , vue , angular , ember都屬于SPA。
二、SPA和MPA的區(qū)別
MPA(MultiPage-page application)就是多頁(yè)應(yīng)用,每一個(gè)頁(yè)面就是主頁(yè)面,都是獨(dú)立的。
區(qū)別:
單頁(yè)面應(yīng)用(SPA) | 多頁(yè)面應(yīng)用(MPA) | |
---|---|---|
組成 | 一個(gè)主頁(yè)面和多個(gè)頁(yè)面片段 | 多個(gè)主頁(yè)面 |
刷新方式 | 局部刷新 | 整頁(yè)刷新 |
url模式 | 哈希模式 | 歷史模式 |
SEO搜索引擎優(yōu)化 | 難實(shí)現(xiàn),可使用SSR方式改善 | 容易實(shí)現(xiàn) |
數(shù)據(jù)傳遞 | 容易 | 通過(guò)url,cookie,localStorage等傳遞 |
頁(yè)面切換 | 速度快、用戶(hù)體驗(yàn)良好 | 切換加載資源,速度慢,用戶(hù)體驗(yàn)差 |
維護(hù)成本 | 相對(duì)容易 | 相對(duì)復(fù)雜 |
三、單頁(yè)應(yīng)用的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 具有桌面應(yīng)用的及時(shí)性、網(wǎng)站的可移植性和可訪(fǎng)問(wèn)性;
- 用戶(hù)體驗(yàn)好、快,內(nèi)容的改變不需要重新加載整個(gè)頁(yè)面;
- 良好的前后端分離,分工更加明確。
缺點(diǎn)
- 不利于搜索引擎的抓??;
- 首次渲染速度相對(duì)較慢。
四、怎么解決SPA首屏加載速度慢
1、什么是首屏加載
首屏?xí)r間:指的是瀏覽器從響應(yīng)用戶(hù)輸入地址,到首屏內(nèi)容渲染完成的時(shí)間,此時(shí)整個(gè)網(wǎng)頁(yè)不一定要全部渲染完成,但要展示當(dāng)前視窗需要的內(nèi)容
2、加載慢的原因
- 網(wǎng)絡(luò)延時(shí)問(wèn)題;
- 資源文件體積是否過(guò)大;
- 資源是否重復(fù)發(fā)送請(qǐng)求加載;
- 加載腳本的時(shí)候,渲染內(nèi)容堵塞。
3、解決方案
減小入口文件體積:常用的手段是路由懶加載,把不同路由對(duì)應(yīng)的組件分割成不同的代碼塊,待路由被請(qǐng)求的時(shí)候會(huì)單獨(dú)打包路由,使得入口文件變小,加載速度大大增加。在vue-router配置路由的時(shí)候,采用動(dòng)態(tài)加載路由的形式。
routes:[ path: 'Blogs', name: 'ShowBlogs', component: () => import('./components/ShowBlogs.vue') ]
- 靜態(tài)資源本地緩存:后端返回資源問(wèn)題:采用HTTP緩存,設(shè)置Cache-Control,Last-Modified,Etag等響應(yīng)頭;采用Service Worker離線(xiàn)緩存。前端合理利用localStorage
- UI框架按需加載:在日常使用UI框架,例如element-UI、或者antd,我們經(jīng)常性直接引用整個(gè)UI庫(kù),但實(shí)際上我用到的組件只有按鈕,分頁(yè),表格,輸入與警告 所以我們要按需引用。
import { Button, Input, Pagination, Table, TableColumn, MessageBox } from 'element-ui'; Vue.use(Button) Vue.use(Input) Vue.use(Pagination)
組件重復(fù)打包:假設(shè)A.js文件是一個(gè)常用的庫(kù),現(xiàn)在有多個(gè)路由使用了A.js文件,這就造成了重復(fù)下載。解決方案:在webpack的config文件中,修改CommonsChunkPlugin的配置。
minChunks: 3 //minChunks為3表示會(huì)把使用3次及以上的包抽離出來(lái),放進(jìn)公共依賴(lài)文件,避免了重復(fù)加載組件
- 圖片資源的壓縮:圖片資源雖然不在編碼過(guò)程中,但它卻是對(duì)頁(yè)面性能影響最大的因素。對(duì)于所有的圖片資源,可以進(jìn)行適當(dāng)?shù)膲嚎s,對(duì)頁(yè)面上使用到的icon,可以使用在線(xiàn)字體圖標(biāo),或者雪碧圖,將眾多小圖標(biāo)合并到同一張圖上,用以減輕http請(qǐng)求壓力。
- 開(kāi)啟GZip壓縮
- 使用SSR:也就是服務(wù)端渲染,組件或頁(yè)面通過(guò)服務(wù)器生成html字符串,再發(fā)送到瀏覽器。從頭搭建一個(gè)服務(wù)端渲染是很復(fù)雜的,vue應(yīng)用建議使用Nuxt.js實(shí)現(xiàn)服務(wù)端渲染。
全面的首屏優(yōu)化方式:
到此這篇關(guān)于Vue SPA單頁(yè)面的應(yīng)用和對(duì)比的文章就介紹到這了,更多相關(guān)Vue SPA單頁(yè)面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Vue中數(shù)據(jù)可視化詞云展示與詞云的生成
數(shù)據(jù)可視化是現(xiàn)代Web應(yīng)用程序中的一個(gè)重要組成部分,詞云是一種非常流行的數(shù)據(jù)可視化形式,可以用來(lái)展示文本數(shù)據(jù)中的主題和關(guān)鍵字,本文我們將介紹如何在Vue中使用詞云庫(kù)進(jìn)行數(shù)據(jù)可視化詞云展示和詞云生成,需要的可以參考一下2023-06-06Vue優(yōu)化:常見(jiàn)會(huì)導(dǎo)致內(nèi)存泄漏問(wèn)題及優(yōu)化詳解
這篇文章主要介紹了Vue優(yōu)化:常見(jiàn)會(huì)導(dǎo)致內(nèi)存泄漏問(wèn)題及優(yōu)化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08如何構(gòu)建 vue-ssr 項(xiàng)目的方法步驟
這篇文章主要介紹了如何構(gòu)建 vue-ssr 項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Vue使用axios post方式將表單中的數(shù)據(jù)以json格式提交給后端接收操作實(shí)例
這篇文章主要介紹了Vue使用axios post方式將表單中的數(shù)據(jù)以json格式提交給后端接收操作,結(jié)合實(shí)例形式分析了vue基于axios庫(kù)post傳送表單json格式數(shù)據(jù)相關(guān)操作實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2023-06-06Vue實(shí)現(xiàn)單點(diǎn)登錄控件的完整代碼
這里提供一個(gè)Vue單點(diǎn)登錄的demo給大家參考,對(duì)Vue實(shí)現(xiàn)單點(diǎn)登錄控件的完整代碼感興趣的朋友跟隨小編一起看看吧2021-11-11Vue實(shí)現(xiàn)點(diǎn)擊按鈕下載文件的操作代碼(后端Java)
最近項(xiàng)目中需要實(shí)現(xiàn)點(diǎn)擊按鈕下載文件的需求,前端用的vue后端使用的java代碼,今天通過(guò)本文給大家分享vue點(diǎn)擊按鈕下載文件的實(shí)現(xiàn)代碼,需要的朋友參考下吧2021-08-08