vue服務(wù)端渲染(SSR)初探

前言

首先來講一下服務(wù)端渲染竞滓,直白的說就是在服務(wù)端拿數(shù)據(jù)進行解析渲染坯沪,直接生成html片段返回給前端署隘。具體用法也有很多種比如:

  • 傳統(tǒng)的服務(wù)端模板引擎渲染整個頁面
  • 服務(wù)渲染生成htmll代碼塊, 前端 AJAX 獲取然后js動態(tài)添加

服務(wù)端渲染的優(yōu)劣

首先是seo問題谓媒,前端動態(tài)渲染的內(nèi)容是不能被抓取到的蚯斯,而使用服務(wù)端渲染就可以解決這個問題况鸣。還有就是首屏加載過慢這種問題牢贸,比如在SPA中,打開首頁需要初始加載很多資源镐捧,這時考慮在首屏使用服務(wù)端渲染潜索,也是一種折中的優(yōu)化方案臭增。但是使用SSR時,勢必會增加服務(wù)器的壓力帮辟,還有可能會需要前后端同構(gòu)速址,使用同樣的模板引擎,這似乎與前后端分離的觀點又是矛盾的由驹。廢話就說到這里芍锚,下面來看一下vue框架中的服務(wù)器渲染。

vue-server-renderer

vue-server-renderer就是vue中處理服務(wù)端加載的一個模塊了蔓榄,官方文檔:https://ssr.vuejs.org/en/并炮,暫時沒有中文版的,我也只是稍微看了一些甥郑,然后寫了一個簡單的demo逃魄。首先新建一個test.js文件,并用npm安裝依賴express澜搅、vue伍俘、vue-server-renderer。引入vue-server-renderer之后勉躺,然后新建一個temp.html作為渲染的基本模板癌瘾,用createRenderer方法新建一個render實例,這里我傳入temp.html作為renderer的template的參數(shù)饵溅,在后面渲染時就會以這個temp.html作為基礎(chǔ)模板妨退。

const renderer = require('vue-server-renderer').createRenderer({
    template: require('fs').readFileSync('./temp.html', 'utf-8')
})

temp.html:

<!DOCTYPE html><br><html lang="en"><br><head><title>{{title}}</title></head>
  <body>
    <!--vue-ssr-outlet-->
  </body>
</html>

接下來隨便定義一些渲染用的數(shù)據(jù),然后用express新建一個node服務(wù)器蜕企,再定義一個vue的實例咬荷。然后再調(diào)用renderer的renderToString方法來渲染生成html,渲染成功后返回給客戶端轻掩。

const Vue = require('vue')
const server = require('express')()
const context = {
  title: 'hello'
}
const mocktitle = '我愛吃的水果'
const mockdata = ['香蕉', '蘋果', '橘子']
server.get('*', (req, res) => {
  const app = new Vue({
    data: {
      url: req.url,
      data: mockdata,
      title: mocktitle
    },
    template: `<div>The visited URL is: {{ url }}
    <h3>{{title}}</h3>
    <p v-for='item in data'>{{item}}</p>
    </div>`
  })
  renderer.renderToString(app, context, (err, html) => {
    if (err) {
      res.status(500).end('Internal Server Error')
      return
    }
    res.end(html)
  })
})
server.listen(8080)

注意這里渲染的數(shù)據(jù)有兩種幸乒,mockdata是作為vue實例的data來渲染在實例模板中的,而context是作為基礎(chǔ)模板的data來渲染temp.html的唇牧∈疟洌可以看到在服務(wù)端用vue進行渲染的規(guī)則和前端渲染時一樣,v-for奋构、v-if等都可以正常使用。最后命令行輸入node test.js拱层,然后在瀏覽器打開http://localhost:8080 查看結(jié)果如下:

示例.png

可以看到服務(wù)端直接返回了一個渲染完成的Doc弥臼,示例demo到此結(jié)束。

結(jié)語

服務(wù)端渲染還是客戶端渲染的問題根灯,個人覺得還是要針對具體業(yè)務(wù)場景然后再做選擇径缅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掺栅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纳猪,更是在濱河造成了極大的恐慌氧卧,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氏堤,死亡現(xiàn)場離奇詭異沙绝,居然都是意外死亡,警方通過查閱死者的電腦和手機鼠锈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門闪檬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人购笆,你說我怎么就攤上這事粗悯。” “怎么了同欠?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵样傍,是天一觀的道長。 經(jīng)常有香客問我铺遂,道長衫哥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任娃循,我火速辦了婚禮炕檩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捌斧。我一直安慰自己笛质,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布捞蚂。 她就那樣靜靜地躺著妇押,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姓迅。 梳的紋絲不亂的頭發(fā)上敲霍,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天,我揣著相機與錄音丁存,去河邊找鬼肩杈。 笑死,一個胖子當(dāng)著我的面吹牛解寝,可吹牛的內(nèi)容都是我干的扩然。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼聋伦,長吁一口氣:“原來是場噩夢啊……” “哼夫偶!你這毒婦竟也來了界睁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤兵拢,失蹤者是張志新(化名)和其女友劉穎翻斟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體说铃,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡访惜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了截汪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疾牲。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖衙解,靈堂內(nèi)的尸體忽然破棺而出阳柔,到底是詐尸還是另有隱情,我是刑警寧澤蚓峦,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布舌剂,位于F島的核電站,受9級特大地震影響暑椰,放射性物質(zhì)發(fā)生泄漏霍转。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一一汽、第九天 我趴在偏房一處隱蔽的房頂上張望避消。 院中可真熱鬧,春花似錦召夹、人聲如沸岩喷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纱意。三九已至,卻和暖如春鲸阔,著一層夾襖步出監(jiān)牢的瞬間偷霉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工褐筛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留类少,地道東北人。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓渔扎,卻偏偏與公主長得像瞒滴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 在實現(xiàn) egg + vue 服務(wù)端渲染工程化實現(xiàn)之前妓忍,我們先來看看前面兩篇關(guān)于Webpack構(gòu)建和Egg的文章: ...
    hubcarl閱讀 6,022評論 0 19
  • 轉(zhuǎn)載 :OpenDiggawesome-github-vue 是由OpenDigg整理并維護的Vue相關(guān)開源項目庫...
    果汁密碼閱讀 23,137評論 8 124
  • 沈華立,天貝車業(yè)愧旦,盛和塾224期學(xué)員世剖,【日精打卡第137天】 《六項精進》1遍共235遍 《大學(xué)》1遍共235遍 ...
    沈華立閱讀 122評論 0 0
  • 我 : 好久沒吃火鍋了,好想吃绑猿妗旁瘫! 你 : 你來我這里我請你吃啊琼蚯! 我 : 你為什么要對我這么好酬凳? 你 : 你傻不...
    白山己閱讀 252評論 0 2
  • 夜色中,寒風(fēng)吹過遭庶,樹上的葉子還沒有落盡宁仔,它們還在瑟瑟地顫抖著不肯離去。 路邊LED大屏幕閃爍著艷麗的色彩峦睡,把樹葉一...
    紫色人生閱讀 276評論 2 0