欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解服務端預渲染之Nuxt(介紹篇)

 更新時間:2019年04月07日 08:35:52   作者:Aaron  
這篇文章主要介紹了詳解服務端預渲染之Nuxt(介紹篇),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

<!DOCTYPE html>
<html>
  <head>
    <meta charset=utf-8>
    <meta name=viewport content="width=device-width,initial-scale=1">
    <title>authorization_web</title>
  </head>
<body>
  <div id=app></div>
</body>
</html>

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

什么是SSR

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

首先看一下傳統(tǒng)的web開發(fā),傳統(tǒng)的web開發(fā)是,客戶端向服務端發(fā)送請求,服務端查詢數(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ā)送請求到服務端,返回HTML結構(但是SPA的返回的HTML結構是非常的小的,只有一個基本的結構,如第一段代碼所示)??蛻舳私邮盏椒祷亟Y果之后,在客戶端開始渲染HTML,渲染時執(zhí)行對應javaScript,最后渲染template,渲染完成之后,再次向服務端發(fā)送數(shù)據(jù)請求,注意這里時數(shù)據(jù)請求,服務端返回json格式數(shù)據(jù)。客戶端接收數(shù)據(jù),然后完成最終渲染。

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

  1. 首屏渲染時間比較長:必須等待JavaScript加載完畢,并且執(zhí)行完畢,才能渲染出首屏。
  2. SEO不友好:爬蟲只能拿到一個div元素,認為頁面是空的,不利于SEO。

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

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

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

Nuxt.js 介紹

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

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

  1. Nuxt不僅僅用于服務端渲染也可以用于SPA應用的開發(fā)
  2. 利用Nuxt提供的項目結構、異步數(shù)據(jù)加載,中間件的支持,布局等特性可大幅提升開發(fā)效率
  3. Nuxt可用于網(wǎng)站靜態(tài)化,可以使用命令將整個網(wǎng)頁打包成靜態(tài)頁面,使SEO更加友好

Nuxt.js 特性

  1. 基于Vue
  2. 自動代碼分層
  3. 服務端渲染
  4. 強大的路由功能,支持異步數(shù)據(jù)
  5. 靜態(tài)文件服務
  6. EcmaScript6和EcmaScript7的語法支持
  7. 打包和壓縮JavaScript和Css
  8. HTML頭部標簽管理
  9. 本地開發(fā)支持熱加載
  10. 集成ESLint
  11. 支持各種樣式預編譯器SASS、LESS等等
  12. 支持HTTP/2推送

Nuxt 渲染流程

一個完整的服務器請求到渲染的流程

通過上面的流程圖可以看出,當一個客戶端請求進入的時候,服務端有通過nuxtServerInit這個命令執(zhí)行在Store的action中,在這里接收到客戶端請求的時候,可以將一些客戶端信息存儲到Store中,也就是說可以把在服務端存儲的一些客戶端的一些登錄信息存儲到Store中。之后使用了中間件機制,中間件其實就是一個函數(shù),會在每個路由執(zhí)行之前去執(zhí)行,在這里可以做很多事情,或者說可以理解為是路由器的攔截器的作用。然后再validate執(zhí)行的時候?qū)蛻舳藬y帶的參數(shù)進行校驗,在asyncData與fetch進入正式的渲染周期,asyncData向服務端獲取數(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        // 選擇服務器框架
Choose features to install         // 選擇安裝的特性
Use a custom UI framework          // 選擇UI框架
Use a custom test framework         // 測試框架
Choose rendering mode            // 渲染模式
  Universal                  // 渲染所有連接頁面
  Single Page App               // 只渲染當前頁面

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

目錄結構介紹

assets       // 存放素材(需要執(zhí)行webpack預處理操作)
components     // 組件
layouts       // 布局文件
static       // 靜態(tài)文件(不需要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自定義配置
  }
 }
}

Nuxt運行命令

{
 "scripts": {
  // 開發(fā)環(huán)境
  "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",
  // 生成靜態(tài)頁面
  "generate": "nuxt generate"
 }
}

結語

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關文章

最新評論