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