亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

服務(wù)端預渲染之Nuxt(介紹篇)

Shonim / 3616人閱讀

摘要:為了解決問題,推出了服務(wù)端預渲染,以便提高對優(yōu)化。應用,到了,單頁面應用優(yōu)秀的用戶體驗,逐漸成為了主流,頁面整體式渲染出來的,稱之為客戶端渲染??蛻舳私邮諗?shù)據(jù),然后完成最終渲染。通過對客戶端服務(wù)端基礎(chǔ)框架的抽象組織,主要關(guān)注的是應用的渲染。

現(xiàn)在前端開發(fā)一般都是前后端分離,mvvmmvc的開發(fā)框架,如Angular、ReactVue等,雖然寫框架能夠使我們快速的完成開發(fā),但是由于前后臺分離,給項目SEO帶來很大的不便,搜索引擎在檢索的時候是在網(wǎng)頁中爬取數(shù)據(jù),由于單頁面應用讀取到的頁面是幾乎空白的,無法爬取到任何數(shù)據(jù)信息。



    
        
        
        authorization_web
    

    

如上代碼,單頁面應用查看源代碼的時候如上所示,所以搜索引擎無法爬取到任何信息,搜索引擎會認為當前頁面為一個空頁面。為了解決SEO問題,推出了SSR服務(wù)端預渲染,以便提高對SEO優(yōu)化。

什么是SSR

在認識SSR之前,首先對CSRSSR之間做個對比。

首先看一下傳統(tǒng)的web開發(fā),傳統(tǒng)的web開發(fā)是,客戶端向服務(wù)端發(fā)送請求,服務(wù)端查詢數(shù)據(jù)庫,拼接HTML字符串(模板),通過一系列的數(shù)據(jù)處理之后,把整理好的HTML返回給客戶端,瀏覽器相當于打開了一個頁面。這種比如我們經(jīng)常聽說過的jsp,PHP,aspx也就是傳統(tǒng)的MVC的開發(fā)。

SPA應用,到了Vue、React,單頁面應用優(yōu)秀的用戶體驗,逐漸成為了主流,頁面整體式javaScript渲染出來的,稱之為客戶端渲染CSR。SPA渲染過程。由客戶端訪問URL發(fā)送請求到服務(wù)端,返回HTML結(jié)構(gòu)(但是SPA的返回的HTML結(jié)構(gòu)是非常的小的,只有一個基本的結(jié)構(gòu),如第一段代碼所示)。客戶端接收到返回結(jié)果之后,在客戶端開始渲染HTML,渲染時執(zhí)行對應javaScript,最后渲染template,渲染完成之后,再次向服務(wù)端發(fā)送數(shù)據(jù)請求,注意這里時數(shù)據(jù)請求,服務(wù)端返回json格式數(shù)據(jù)??蛻舳私邮諗?shù)據(jù),然后完成最終渲染。

SPA雖然給服務(wù)器減輕了壓力,但是也是有缺點的:

首屏渲染時間比較長:必須等待JavaScript加載完畢,并且執(zhí)行完畢,才能渲染出首屏。

SEO不友好:爬蟲只能拿到一個div元素,認為頁面是空的,不利于SEO。

為了解決如上兩個問題,出現(xiàn)了SSR解決方案,后端渲染出首屏的DOM結(jié)構(gòu)返回,前端拿到內(nèi)容帶上首屏,后續(xù)的頁面操作,再用單頁面路由和渲染,稱之為服務(wù)端渲染(SSR)。

SSR渲染流程是這樣的,客戶端發(fā)送URL請求到服務(wù)端,服務(wù)端讀取對應的url的模板信息,在服務(wù)端做出html數(shù)據(jù)的渲染,渲染完成之后返回html結(jié)構(gòu),客戶端這時拿到的之后首屏頁面的html結(jié)構(gòu)。所以用戶在瀏覽首屏的時候速度會很快,因為客戶端不需要再次發(fā)送ajax請求。并不是做了SSR我們的頁面就不屬于SPA應用了,它仍然是一個獨立的spa應用。

SSR是處于CSRSPA應用之間的一個折中的方案,在渲染首屏的時候在服務(wù)端做出了渲染,注意僅僅是首屏,其他頁面還是需要在客戶端渲染的,在服務(wù)端接收到請求之后并且渲染出首屏頁面,會攜帶著剩余的路由信息預留給客戶端去渲染其他路由的頁面。

Nuxt.js 介紹

Nuxt官方網(wǎng)站有一句這樣的話:Nuxt.js預設(shè)了使您開發(fā)Vue.js應用程序所需的所有配置。Nuxt是一個基于Vue.js的通用應用框架。通過對客戶端/服務(wù)端基礎(chǔ)框架的抽象組織,Nuxt主要關(guān)注的是應用的ui渲染。

通過上面的這些介紹可以簡單的得出:

Nuxt不僅僅用于服務(wù)端渲染也可以用于SPA應用的開發(fā)

利用Nuxt提供的項目結(jié)構(gòu)、異步數(shù)據(jù)加載,中間件的支持,布局等特性可大幅提升開發(fā)效率

Nuxt可用于網(wǎng)站靜態(tài)化,可以使用命令將整個網(wǎng)頁打包成靜態(tài)頁面,使SEO更加友好

Nuxt.js 特性

基于Vue

自動代碼分層

服務(wù)端渲染

強大的路由功能,支持異步數(shù)據(jù)

靜態(tài)文件服務(wù)

EcmaScript6EcmaScript7的語法支持

打包和壓縮JavaScriptCss

HTML頭部標簽管理

本地開發(fā)支持熱加載

集成ESLint

支持各種樣式預編譯器SASS、LESS等等

支持HTTP/2推送

Nuxt 渲染流程

一個完整的服務(wù)器請求到渲染的流程

通過上面的流程圖可以看出,當一個客戶端請求進入的時候,服務(wù)端有通過nuxtServerInit這個命令執(zhí)行在Storeaction中,在這里接收到客戶端請求的時候,可以將一些客戶端信息存儲到Store中,也就是說可以把在服務(wù)端存儲的一些客戶端的一些登錄信息存儲到Store中。之后使用了中間件機制,中間件其實就是一個函數(shù),會在每個路由執(zhí)行之前去執(zhí)行,在這里可以做很多事情,或者說可以理解為是路由器的攔截器的作用。然后再validate執(zhí)行的時候?qū)蛻舳藬y帶的參數(shù)進行校驗,在asyncDatafetch進入正式的渲染周期,asyncData向服務(wù)端獲取數(shù)據(jù),把請求到的數(shù)據(jù)合并到Vue中的data中,

Nuxt說明

Nuxt安裝:

確保安裝了npx(npx在NPM版本5.2.0默認安裝了):

npx create-nuxt-app <項目名>

安裝向?qū)В?/p>

Project name                                //  項目名稱
Project description                         //  項目描述
Use a custom server framework               //  選擇服務(wù)器框架
Choose features to install                  //  選擇安裝的特性
Use a custom UI framework                   //  選擇UI框架
Use a custom test framework                 //  測試框架
Choose rendering mode                       //  渲染模式
    Universal                                   //  渲染所有連接頁面
    Single Page App                             //  只渲染當前頁面

這些都是比較重要的其他的配置內(nèi)容就不做介紹了,一路回車即可。

目錄結(jié)構(gòu)介紹
assets              //  存放素材(需要執(zhí)行webpack預處理操作)
components          //  組件
layouts             //  布局文件
static              //  靜態(tài)文件(不需要webpack預處理操作)
middleware          //  中間件
pages               //  所有頁面
plugins             //  插件
server              //  服務(wù)端代碼
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自定義配置
    }
  }
}
Nuxt運行命令
{
  "scripts": {
    //  開發(fā)環(huán)境
    "dev": "cross-env NODE_ENV=development nodemon server/index.js --watch server",
    //  打包
    "build": "nuxt build",
    //  在服務(wù)端運行
    "start": "cross-env NODE_ENV=production node server/index.js",
    //  生成靜態(tài)頁面
    "generate": "nuxt generate"
  }
}
結(jié)語

這里簡單的對Nuxt做了一些介紹,會持續(xù)更新對Nuxt的跟進,希望會對大家有所幫助,如果有什么問題,可以在下面留言。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/103279.html

相關(guān)文章

  • 服務(wù)端預渲染Nuxt(路由)

    摘要:前面既然說到了會把文件夾下面的所有文件編譯成路由,那么子路由需要使用文件夾嵌套才行??蛻舳耸状卧L問的頁面會在服務(wù)端做輸出,一旦渲染完成之后,則不會再在服務(wù)端輸出,則會一直在客戶端進行輸出了。 服務(wù)端預渲染之Nuxt - 使用 現(xiàn)在大多數(shù)開發(fā)都是基于Vue或者React開發(fā)的,能夠達到快速開發(fā)的效果,也有一些不足的地方,Nuxt能夠在服務(wù)端做出渲染,然后讓搜索引擎在爬取數(shù)據(jù)的時候能夠讀到...

    yuanxin 評論0 收藏0
  • 服務(wù)端預渲染Nuxt - (爬坑

    摘要:根據(jù)官方文檔在文件下面創(chuàng)建兩個文件,分別是和。在中可以直接使用,并且是默認啟用命名空間的。在中觸發(fā)熱更新。使用中間件中間件沒有給出具體的使用文檔,而是放入了一個編輯器。對配置有興趣的可以在官方文檔找到渲染文檔。 Nuxt是解決SEO的比較常用的解決方案,隨著Nuxt也有很多坑,每當突破一個小技術(shù)點的時候,都有很大的成就感,在這段時間里著實讓我痛并快樂著。在這里根據(jù)個人學習情況,所踩過的...

    cucumber 評論0 收藏0
  • 手把手教你搭建SSR(vue/vue-cli + express)

    摘要:最近簡單的研究了一下,對已經(jīng)有了一個簡單的認知,主要應用于單頁面應用,是很不錯的框架。創(chuàng)建好之后,在命令行直接輸入即可,當控制臺顯示服務(wù)已啟動則表示該服務(wù)已經(jīng)啟動成功了。配置參數(shù)中有一項為這項配置的就是我們即將使用的模板。 最近簡單的研究了一下SSR,對SSR已經(jīng)有了一個簡單的認知,主要應用于單頁面應用,Nuxt是SSR很不錯的框架。也有過調(diào)研,簡單的用了一下,感覺還是很不錯。但是還是...

    liangdas 評論0 收藏0
  • 前端面試Html

    摘要:和是提供的,可用于請求之間保存數(shù)據(jù)。關(guān)閉窗口后,即被銷毀。答當解析器遇到標簽時,文檔的解析將停止,并立即下載并執(zhí)行腳本,腳本執(zhí)行完畢后將繼續(xù)解析文檔。而的腳本不同,只要腳本下載完成,將會立即執(zhí)行,未必會按照聲明順序執(zhí)行。 1 . doctype(文檔類型) 的作用是什么? ☆ 對文檔進行有效性驗證: 它告訴用戶代理和校驗器這個文檔是按照什么DTD 寫的。這個動作是被動的, 每次...

    IamDLY 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<