摘要:為了解決問(wèn)題,推出了服務(wù)端預(yù)渲染,以便提高對(duì)優(yōu)化。應(yīng)用,到了,單頁(yè)面應(yīng)用優(yōu)秀的用戶體驗(yàn),逐漸成為了主流,頁(yè)面整體式渲染出來(lái)的,稱(chēng)之為客戶端渲染。客戶端接收數(shù)據(jù),然后完成最終渲染。通過(guò)對(duì)客戶端服務(wù)端基礎(chǔ)框架的抽象組織,主要關(guān)注的是應(yīng)用的渲染。
現(xiàn)在前端開(kāi)發(fā)一般都是前后端分離,mvvm和mvc的開(kāi)發(fā)框架,如Angular、React和Vue等,雖然寫(xiě)框架能夠使我們快速的完成開(kāi)發(fā),但是由于前后臺(tái)分離,給項(xiàng)目SEO帶來(lái)很大的不便,搜索引擎在檢索的時(shí)候是在網(wǎng)頁(yè)中爬取數(shù)據(jù),由于單頁(yè)面應(yīng)用讀取到的頁(yè)面是幾乎空白的,無(wú)法爬取到任何數(shù)據(jù)信息。
authorization_web
如上代碼,單頁(yè)面應(yīng)用查看源代碼的時(shí)候如上所示,所以搜索引擎無(wú)法爬取到任何信息,搜索引擎會(huì)認(rèn)為當(dāng)前頁(yè)面為一個(gè)空頁(yè)面。為了解決SEO問(wèn)題,推出了SSR服務(wù)端預(yù)渲染,以便提高對(duì)SEO優(yōu)化。
什么是SSR
在認(rèn)識(shí)SSR之前,首先對(duì)CSR與SSR之間做個(gè)對(duì)比。
首先看一下傳統(tǒng)的web開(kāi)發(fā),傳統(tǒng)的web開(kāi)發(fā)是,客戶端向服務(wù)端發(fā)送請(qǐng)求,服務(wù)端查詢數(shù)據(jù)庫(kù),拼接HTML字符串(模板),通過(guò)一系列的數(shù)據(jù)處理之后,把整理好的HTML返回給客戶端,瀏覽器相當(dāng)于打開(kāi)了一個(gè)頁(yè)面。這種比如我們經(jīng)常聽(tīng)說(shuō)過(guò)的jsp,PHP,aspx也就是傳統(tǒng)的MVC的開(kāi)發(fā)。
SPA應(yīng)用,到了Vue、React,單頁(yè)面應(yīng)用優(yōu)秀的用戶體驗(yàn),逐漸成為了主流,頁(yè)面整體式javaScript渲染出來(lái)的,稱(chēng)之為客戶端渲染CSR。SPA渲染過(guò)程。由客戶端訪問(wèn)URL發(fā)送請(qǐng)求到服務(wù)端,返回HTML結(jié)構(gòu)(但是SPA的返回的HTML結(jié)構(gòu)是非常的小的,只有一個(gè)基本的結(jié)構(gòu),如第一段代碼所示)??蛻舳私邮盏椒祷亟Y(jié)果之后,在客戶端開(kāi)始渲染HTML,渲染時(shí)執(zhí)行對(duì)應(yīng)javaScript,最后渲染template,渲染完成之后,再次向服務(wù)端發(fā)送數(shù)據(jù)請(qǐng)求,注意這里時(shí)數(shù)據(jù)請(qǐng)求,服務(wù)端返回json格式數(shù)據(jù)??蛻舳私邮諗?shù)據(jù),然后完成最終渲染。
SPA雖然給服務(wù)器減輕了壓力,但是也是有缺點(diǎn)的:
首屏渲染時(shí)間比較長(zhǎng):必須等待JavaScript加載完畢,并且執(zhí)行完畢,才能渲染出首屏。
SEO不友好:爬蟲(chóng)只能拿到一個(gè)div元素,認(rèn)為頁(yè)面是空的,不利于SEO。
為了解決如上兩個(gè)問(wèn)題,出現(xiàn)了SSR解決方案,后端渲染出首屏的DOM結(jié)構(gòu)返回,前端拿到內(nèi)容帶上首屏,后續(xù)的頁(yè)面操作,再用單頁(yè)面路由和渲染,稱(chēng)之為服務(wù)端渲染(SSR)。
SSR渲染流程是這樣的,客戶端發(fā)送URL請(qǐng)求到服務(wù)端,服務(wù)端讀取對(duì)應(yīng)的url的模板信息,在服務(wù)端做出html和數(shù)據(jù)的渲染,渲染完成之后返回html結(jié)構(gòu),客戶端這時(shí)拿到的之后首屏頁(yè)面的html結(jié)構(gòu)。所以用戶在瀏覽首屏的時(shí)候速度會(huì)很快,因?yàn)榭蛻舳瞬恍枰俅伟l(fā)送ajax請(qǐng)求。并不是做了SSR我們的頁(yè)面就不屬于SPA應(yīng)用了,它仍然是一個(gè)獨(dú)立的spa應(yīng)用。
SSR是處于CSR與SPA應(yīng)用之間的一個(gè)折中的方案,在渲染首屏的時(shí)候在服務(wù)端做出了渲染,注意僅僅是首屏,其他頁(yè)面還是需要在客戶端渲染的,在服務(wù)端接收到請(qǐng)求之后并且渲染出首屏頁(yè)面,會(huì)攜帶著剩余的路由信息預(yù)留給客戶端去渲染其他路由的頁(yè)面。
Nuxt.js 介紹
在Nuxt官方網(wǎng)站有一句這樣的話:Nuxt.js預(yù)設(shè)了使您開(kāi)發(fā)Vue.js應(yīng)用程序所需的所有配置。Nuxt是一個(gè)基于Vue.js的通用應(yīng)用框架。通過(guò)對(duì)客戶端/服務(wù)端基礎(chǔ)框架的抽象組織,Nuxt主要關(guān)注的是應(yīng)用的ui渲染。
通過(guò)上面的這些介紹可以簡(jiǎn)單的得出:
Nuxt不僅僅用于服務(wù)端渲染也可以用于SPA應(yīng)用的開(kāi)發(fā)
利用Nuxt提供的項(xiàng)目結(jié)構(gòu)、異步數(shù)據(jù)加載,中間件的支持,布局等特性可大幅提升開(kāi)發(fā)效率
Nuxt可用于網(wǎng)站靜態(tài)化,可以使用命令將整個(gè)網(wǎng)頁(yè)打包成靜態(tài)頁(yè)面,使SEO更加友好
Nuxt.js 特性
基于Vue
自動(dòng)代碼分層
服務(wù)端渲染
強(qiáng)大的路由功能,支持異步數(shù)據(jù)
靜態(tài)文件服務(wù)
EcmaScript6和EcmaScript7的語(yǔ)法支持
打包和壓縮JavaScript和Css
HTML頭部標(biāo)簽管理
本地開(kāi)發(fā)支持熱加載
集成ESLint
支持各種樣式預(yù)編譯器SASS、LESS等等
支持HTTP/2推送
Nuxt 渲染流程
一個(gè)完整的服務(wù)器請(qǐng)求到渲染的流程
通過(guò)上面的流程圖可以看出,當(dāng)一個(gè)客戶端請(qǐng)求進(jìn)入的時(shí)候,服務(wù)端有通過(guò)nuxtServerInit這個(gè)命令執(zhí)行在Store的action中,在這里接收到客戶端請(qǐng)求的時(shí)候,可以將一些客戶端信息存儲(chǔ)到Store中,也就是說(shuō)可以把在服務(wù)端存儲(chǔ)的一些客戶端的一些登錄信息存儲(chǔ)到Store中。之后使用了中間件機(jī)制,中間件其實(shí)就是一個(gè)函數(shù),會(huì)在每個(gè)路由執(zhí)行之前去執(zhí)行,在這里可以做很多事情,或者說(shuō)可以理解為是路由器的攔截器的作用。然后再validate執(zhí)行的時(shí)候?qū)蛻舳藬y帶的參數(shù)進(jìn)行校驗(yàn),在asyncData與fetch進(jìn)入正式的渲染周期,asyncData向服務(wù)端獲取數(shù)據(jù),把請(qǐng)求到的數(shù)據(jù)合并到Vue中的data中,
Nuxt說(shuō)明
Nuxt安裝:
確保安裝了npx(npx在NPM版本5.2.0默認(rèn)安裝了):
npx create-nuxt-app <項(xiàng)目名>
安裝向?qū)В?/p>
Project name // 項(xiàng)目名稱(chēng) Project description // 項(xiàng)目描述 Use a custom server framework // 選擇服務(wù)器框架 Choose features to install // 選擇安裝的特性 Use a custom UI framework // 選擇UI框架 Use a custom test framework // 測(cè)試框架 Choose rendering mode // 渲染模式 Universal // 渲染所有連接頁(yè)面 Single Page App // 只渲染當(dāng)前頁(yè)面
這些都是比較重要的其他的配置內(nèi)容就不做介紹了,一路回車(chē)即可。
assets // 存放素材(需要執(zhí)行webpack預(yù)處理操作) components // 組件 layouts // 布局文件 static // 靜態(tài)文件(不需要webpack預(yù)處理操作) middleware // 中間件 pages // 所有頁(yè)面 plugins // 插件 server // 服務(wù)端代碼 store // vuex
const pkg = require("./package") module.exports = { mode: "universal", // 當(dāng)前渲染使用模式 head: { // 頁(yè)面head配置信息 title: pkg.name, // title meta: [ // meat { charset: "utf-8" }, { name: "viewport", content: "width=device-width, initial-scale=1" }, { hid: "description", name: "description", content: pkg.description } ], link: [ // favicon,若引用css不會(huì)進(jìn)行打包處理 { rel: "icon", type: "image/x-icon", href: "/favicon.ico" } ] }, loading: { color: "#fff" }, // 頁(yè)面進(jìn)度條 css: [ // 全局css(會(huì)進(jìn)行webpack打包處理) "element-ui/lib/theme-chalk/index.css" ], plugins: [ // 插件 "@/plugins/element-ui" ], modules: [ // 模塊 "@nuxtjs/axios", ], axios: {}, build: { // 打包 transpile: [/^element-ui/], extend(config, ctx) { // webpack自定義配置 } } }
{ "scripts": { // 開(kāi)發(fā)環(huán)境 "dev": "cross-env NODE_ENV=development nodemon server/index.js --watch server", // 打包 "build": "nuxt build", // 在服務(wù)端運(yùn)行 "start": "cross-env NODE_ENV=production node server/index.js", // 生成靜態(tài)頁(yè)面 "generate": "nuxt generate" } }
結(jié)語(yǔ)
這里簡(jiǎn)單的對(duì)Nuxt做了一些介紹,會(huì)持續(xù)更新對(duì)Nuxt的跟進(jìn),希望會(huì)對(duì)大家有所幫助,如果有什么問(wèn)題,可以在下面留言。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103279.html
摘要:前面既然說(shuō)到了會(huì)把文件夾下面的所有文件編譯成路由,那么子路由需要使用文件夾嵌套才行。客戶端首次訪問(wèn)的頁(yè)面會(huì)在服務(wù)端做輸出,一旦渲染完成之后,則不會(huì)再在服務(wù)端輸出,則會(huì)一直在客戶端進(jìn)行輸出了。 服務(wù)端預(yù)渲染之Nuxt - 使用 現(xiàn)在大多數(shù)開(kāi)發(fā)都是基于Vue或者React開(kāi)發(fā)的,能夠達(dá)到快速開(kāi)發(fā)的效果,也有一些不足的地方,Nuxt能夠在服務(wù)端做出渲染,然后讓搜索引擎在爬取數(shù)據(jù)的時(shí)候能夠讀到...
摘要:根據(jù)官方文檔在文件下面創(chuàng)建兩個(gè)文件,分別是和。在中可以直接使用,并且是默認(rèn)啟用命名空間的。在中觸發(fā)熱更新。使用中間件中間件沒(méi)有給出具體的使用文檔,而是放入了一個(gè)編輯器。對(duì)配置有興趣的可以在官方文檔找到渲染文檔。 Nuxt是解決SEO的比較常用的解決方案,隨著Nuxt也有很多坑,每當(dāng)突破一個(gè)小技術(shù)點(diǎn)的時(shí)候,都有很大的成就感,在這段時(shí)間里著實(shí)讓我痛并快樂(lè)著。在這里根據(jù)個(gè)人學(xué)習(xí)情況,所踩過(guò)的...
摘要:最近簡(jiǎn)單的研究了一下,對(duì)已經(jīng)有了一個(gè)簡(jiǎn)單的認(rèn)知,主要應(yīng)用于單頁(yè)面應(yīng)用,是很不錯(cuò)的框架。創(chuàng)建好之后,在命令行直接輸入即可,當(dāng)控制臺(tái)顯示服務(wù)已啟動(dòng)則表示該服務(wù)已經(jīng)啟動(dòng)成功了。配置參數(shù)中有一項(xiàng)為這項(xiàng)配置的就是我們即將使用的模板。 最近簡(jiǎn)單的研究了一下SSR,對(duì)SSR已經(jīng)有了一個(gè)簡(jiǎn)單的認(rèn)知,主要應(yīng)用于單頁(yè)面應(yīng)用,Nuxt是SSR很不錯(cuò)的框架。也有過(guò)調(diào)研,簡(jiǎn)單的用了一下,感覺(jué)還是很不錯(cuò)。但是還是...
摘要:和是提供的,可用于請(qǐng)求之間保存數(shù)據(jù)。關(guān)閉窗口后,即被銷(xiāo)毀。答當(dāng)解析器遇到標(biāo)簽時(shí),文檔的解析將停止,并立即下載并執(zhí)行腳本,腳本執(zhí)行完畢后將繼續(xù)解析文檔。而的腳本不同,只要腳本下載完成,將會(huì)立即執(zhí)行,未必會(huì)按照聲明順序執(zhí)行。 1 . doctype(文檔類(lèi)型) 的作用是什么? ☆ 對(duì)文檔進(jìn)行有效性驗(yàn)證: 它告訴用戶代理和校驗(yàn)器這個(gè)文檔是按照什么DTD 寫(xiě)的。這個(gè)動(dòng)作是被動(dòng)的, 每次...
閱讀 1004·2021-11-24 10:30
閱讀 2329·2021-10-08 10:04
閱讀 3972·2021-09-30 09:47
閱讀 1453·2021-09-29 09:45
閱讀 1448·2021-09-24 10:33
閱讀 6281·2021-09-22 15:57
閱讀 2361·2021-09-22 15:50
閱讀 4092·2021-08-30 09:45