讀本文前,請先熟讀nuxt
官方文檔,并且具備一定的vue.js
相關(guān)開發(fā)經(jīng)驗(yàn)
中文文檔
英文文檔
vue SSR指南
一、CSR和SSR對比
在SPA
之前的時代,我們傳統(tǒng)的Web
架構(gòu)大都是SSR
,如:Wordpress(PHP)
、JSP
技術(shù)、JavaWeb
等這些程序都是傳統(tǒng)典型的SSR
架構(gòu),即:服務(wù)端取出數(shù)據(jù)和模板組合生成 html
輸出給前端,前端發(fā)生請求時,重新向服務(wù)端請求html
資源。
SPA(CSR):
SPA
應(yīng)用,到了Vue
、React
,單頁面應(yīng)用優(yōu)秀的用戶體驗(yàn),逐漸成為了主流,頁面整體是javaScript
渲染出來的,稱之為客戶端渲染CSR
。SPA
渲染過程。由客戶端訪問URL
發(fā)送請求到服務(wù)端,返回HTML
結(jié)構(gòu)(但是SPA
的返回的HTML
結(jié)構(gòu)是非常的小的,只有一個基本的結(jié)構(gòu))??蛻舳私邮盏椒祷亟Y(jié)果之后,在客戶端開始渲染HTML
,渲染時執(zhí)行對應(yīng)javaScript
,最后渲染template
,渲染完成之后,再次向服務(wù)端發(fā)送數(shù)據(jù)請求,注意這里時數(shù)據(jù)請求,服務(wù)端返回json
格式數(shù)據(jù)??蛻舳私邮諗?shù)據(jù),然后完成最終渲染。
CSR原理圖
CSR多數(shù)是基于webpack構(gòu)建的項(xiàng)目,編譯出來的html文件,資源文件都被打包到j(luò)s中,這樣的頁面是不利于搜索引擎優(yōu)化(SEO, Search Engine Optimization)
,并且內(nèi)容到達(dá)時間(time-to-content) (或稱之為首屏渲染時長)
也有很大的優(yōu)化空間
簡單來講,SPA
雖然給服務(wù)器減輕了壓力,也存在比較明顯的兩個缺點(diǎn):
JavaScript
加載完畢,并且執(zhí)行完畢,才能渲染出首屏。SEO
不友好:爬蟲只能拿到一個div
元素,認(rèn)為頁面是空的,不利于SEO
。什么是SEO
呢?SEO
即通過各種技術(shù)(手段)來確保,你的Web
內(nèi)容被搜素引擎大化收錄,大化提高權(quán)重,帶來更多流量。大部分的搜索引擎僅能抓取URI
直接輸出的數(shù)據(jù)資源,對于 Ajax
類的異步請求的數(shù)據(jù)無法抓取
因此,對于那些展示宣傳型頁面,如官網(wǎng),必須進(jìn)行服務(wù)端渲染
SSR:
為了解決如上兩個問題,出現(xiàn)了SSR
解決方案,后端渲染出首屏的DOM
結(jié)構(gòu)返回,前端拿到內(nèi)容帶上首屏,后續(xù)的頁面操作,再用單頁面路由和渲染,稱之為服務(wù)端渲染(SSR)
。
SSR
渲染流程是這樣的,客戶端發(fā)送URL
請求到服務(wù)端,在服務(wù)端做出html
和數(shù)據(jù)
的渲染,渲染完成之后返回html
結(jié)構(gòu),客戶端拿到頁面的html
結(jié)構(gòu)渲染首屏。所以用戶在瀏覽首屏的時候速度會很快,因?yàn)榭蛻舳瞬恍枰俅伟l(fā)送ajax
請求。并不是做了SSR
我們的頁面就不屬于SPA
應(yīng)用了,它仍然是一個獨(dú)立的spa
應(yīng)用。
SSR原理圖
SSR
是處于CSR
與SPA
應(yīng)用之間的一個折中的方案,在渲染首屏的時候在服務(wù)端做出了渲染,注意僅僅是首屏,其他頁面還是需要在客戶端渲染的,在服務(wù)端
接收到請求之后并且渲染出首屏頁面,會攜帶著剩余的路由信息預(yù)留給客戶端
去渲染其他路由的頁面。
vueSSR
將本來要放在瀏覽器執(zhí)行創(chuàng)建的組件,放到服務(wù)端先創(chuàng)建好,然后生成對應(yīng)的html將它們直接發(fā)送到瀏覽器,最后將這些靜態(tài)標(biāo)記"激活"為客戶端上完全可交互的應(yīng)用程序。
在瀏覽器第一次訪問某個URI
資源的時候(首屏),Web
服務(wù)器根據(jù)路由拿到對應(yīng)數(shù)據(jù)渲染并輸出,且輸出的數(shù)據(jù)中包含兩部分:
在首屏渲染完成之后,此時我們看到的其實(shí)已經(jīng)是一個和之前的SPA
相差無幾的應(yīng)用程序了,接下來我們進(jìn)行的任何操作都只是客戶端的應(yīng)用進(jìn)行交互,頁面/組件由Web
端渲染,路由也由瀏覽器控制,用戶只需要和當(dāng)前瀏覽器內(nèi)的應(yīng)用打交道就可以了。
vueSSR原理圖
webpack
將 Source
打包出兩個bundle
文件:其中 Server Bundle
用于服務(wù)端渲染,服務(wù)端通過渲染器 bundleRenderer
將 bundle
生成首屏html
片段;而 Client Bundle
用于客戶端渲染,首屏外的交互和數(shù)據(jù)處理還是需要瀏覽器執(zhí)行 Client Bundle
來完成
缺點(diǎn):
(lifecycle hook)
中使用;一些外部擴(kuò)展庫(external library)
可能需要特殊處理,才能在服務(wù)器渲染應(yīng)用程序中運(yùn)行。Node.js
中渲染完整的應(yīng)用程序,顯然會比僅僅提供靜態(tài)文件的 server
更加大量占用 CPU
資源,因此如果你預(yù)料在高流量環(huán)境(high traffic)
下使用,請準(zhǔn)備相應(yīng)的服務(wù)器負(fù)載,并明智地采用緩存策略。二、nuxt.js介紹
1. nuxt.js是什么?
Nuxt.js
是vue
官方推薦的一個基于Vue.js
的做Vue SSR
的通用應(yīng)用框架(開箱即用),集成了Vue,Vue-Router,Vuex,Vue-Meta
等組件/框架,內(nèi)置了webpack
用于自動化構(gòu)建,使我們可以更快速地搭建一個具有服務(wù)端渲染能力的應(yīng)用。
2. nuxt.js的優(yōu)勢?
作為框架,Nuxt.js
為 客戶端/服務(wù)端 這種典型的應(yīng)用架構(gòu)模式提供了許多有用的特性,例如異步數(shù)據(jù)加載、中間件支持、布局支持等。Nuxt.js
有以下比較明顯的特性
SASS,LESS
等等HTML
頭部標(biāo)簽管理(依賴vue-meta
實(shí)現(xiàn))webpack
配置,無需額外配置3. nuxt.js的使用
npm create nuxt-app <project-name>
網(wǎng)站標(biāo)題:詳解Nuxt.js實(shí)戰(zhàn)集錦-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://chinadenli.net/article20/dgjjco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、App設(shè)計(jì)、虛擬主機(jī)、云服務(wù)器、網(wǎng)站改版、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容