vue-ssr服務(wù)端渲染簡單例子

一、什么是服務(wù)器端渲染(SSR)?
就是在服務(wù)端拼接好用戶請求的靜態(tài)頁面,直接返回給客戶端,客戶端激活這些靜態(tài)頁面,讓他們變成動態(tài)的,并且能夠響應(yīng)后續(xù)的數(shù)據(jù)變化。

二、為什么使用服務(wù)器端渲染(SSR)?
1、更好的 SEO(SEO是由英文Search Engine Optimization縮寫而來, 中文意譯為“[搜索引擎優(yōu)化]),由于搜索引擎爬蟲抓取工具可以直接查看完全渲染的頁面。

2、產(chǎn)生更好的用戶體驗,更快的首屏渲染更快的內(nèi)容到達時間(time-to-content),特別是對于緩慢的網(wǎng)絡(luò)情況或運行緩慢的設(shè)備。無需等待所有的 JavaScript 都完成下載并執(zhí)行,才顯示服務(wù)器渲染的標(biāo)記,所以你的用戶將會更快速地看到完整渲染的頁面。

三、基礎(chǔ)使用

  • 新建一個文件夾,執(zhí)行以下命令
$ npm install vue vue-server-renderer --save
$ npm install express --save

生成如下文件夾


image.png

自己新建demo文件里面新建index.html和index.js文件
index.html寫上

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{title}}</title>
        {{{meta}}}
</head>
<body>
    <!--vue-ssr-outlet--> <!--注意:這是注入應(yīng)用程序標(biāo)記的位置。-->
</body>
</html>

index.js中寫上

const Vue = require('vue')
const server = require('express')()
const fs = require('fs')

//讀取模版
const renderer = require('vue-server-renderer').createRenderer({
    template: fs.readFileSync('./index.html', 'utf-8')
})  
// 此參數(shù)是vue 生成Dom之外位置的數(shù)據(jù)  如vue生成的dom一般位于body中的某個元素容器中,
//此數(shù)據(jù)可在header標(biāo)簽等位置渲染,是renderer.renderToString()的第二個參數(shù),
//第一個參數(shù)是vue實例,第三個參數(shù)是一個回調(diào)函數(shù)。
const context = {
      title: 'Vue-ssr初探',
      meta:` <meta name="viewport" content="width=device-width, initial-scale=1" /> `
}

server.get('*', (req, res) => {
      //創(chuàng)建vue實例   主要用于替換index.html中body注釋地方的內(nèi)容,
    //和index.html中 <!--vue-ssr-outlet-->的地方是對應(yīng)的
    const app = new Vue({
        data: {
            url: req.url,
            data: ['加油,你是最胖的'],
            title: '歡迎學(xué)習(xí)vue-ssr服務(wù)端渲染'
        },
        //template 中的文本最外層一定要有容器包裹, 和vue的組件中是一樣的,
      //只能有一個父級元素,萬萬不能忘了!
        template: `
            <div>
                <div>url : {{url}}</div>
                <p>{{title}}</p>
                <p v-for='item in data'>{{item}}</p>
            </div>
        `
    })

//將 Vue 實例渲染為字符串  (其他的API自己看用法是一樣的)
    renderer.renderToString(app, context,  (err, html) => {
        if (err) {
            res.status(500).end('err:' + err) 
            return 
        }
    //將模版發(fā)送給瀏覽器
        res.end(html)
        console.log('http://localhost:8080/')
    })
})

server.listen(8080)
image.png

image.png

打開demo文件夾,運行index.js

node index.js
image.png

打開http://localhost:8080/

image.png

瀏覽器右鍵查看源代碼
image.png

官方文檔https://ssr.vuejs.org/guide/#installation

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容