Vue服務(wù)端渲染SSR(摘自官方)

https://juejin.im/entry/5b2c55c551882574dd4ad5bb
https://ssr.vuejs.org/zh/

什么是服務(wù)器端渲染(SSR)胚嘲?

Vue.js 是構(gòu)建客戶端應(yīng)用程序的框架幕庐。默認(rèn)情況下谈为,可以在瀏覽器中輸出 Vue 組件培己,進(jìn)行生成 DOM 和操作 DOM。然而热鞍,也可以將同一個(gè)組件渲染為服務(wù)器端的 HTML 字符串,將它們直接發(fā)送到瀏覽器,最后將這些靜態(tài)標(biāo)記"激活"為客戶端上完全可交互的應(yīng)用程序列粪。

服務(wù)器渲染的 Vue.js 應(yīng)用程序也可以被認(rèn)為是"同構(gòu)"或"通用",因?yàn)閼?yīng)用程序的大部分代碼都可以在服務(wù)器客戶端上運(yùn)行谈飒。

#為什么使用服務(wù)器端渲染(SSR)岂座?

與傳統(tǒng) SPA(Single-Page Application - 單頁(yè)應(yīng)用程序)相比,服務(wù)器端渲染(SSR)的優(yōu)勢(shì)主要在于:

  • 更好的 SEO杭措,由于搜索引擎爬蟲(chóng)抓取工具可以直接查看完全渲染的頁(yè)面费什。

    請(qǐng)注意,截至目前手素,Google 和 Bing 可以很好對(duì)同步 JavaScript 應(yīng)用程序進(jìn)行索引鸳址。在這里,同步是關(guān)鍵泉懦。如果你的應(yīng)用程序初始展示 loading 菊花圖稿黍,然后通過(guò) Ajax 獲取內(nèi)容,抓取工具并不會(huì)等待異步完成后再行抓取頁(yè)面內(nèi)容崩哩。也就是說(shuō)巡球,如果 SEO 對(duì)你的站點(diǎn)至關(guān)重要,而你的頁(yè)面又是異步獲取內(nèi)容琢锋,則你可能需要服務(wù)器端渲染(SSR)解決此問(wèn)題辕漂。

  • 更快的內(nèi)容到達(dá)時(shí)間(time-to-content),特別是對(duì)于緩慢的網(wǎng)絡(luò)情況或運(yùn)行緩慢的設(shè)備吴超。無(wú)需等待所有的 JavaScript 都完成下載并執(zhí)行钉嘹,才顯示服務(wù)器渲染的標(biāo)記,所以你的用戶將會(huì)更快速地看到完整渲染的頁(yè)面鲸阻。通嘲匣粒可以產(chǎn)生更好的用戶體驗(yàn),并且對(duì)于那些「內(nèi)容到達(dá)時(shí)間(time-to-content)與轉(zhuǎn)化率直接相關(guān)」的應(yīng)用程序而言鸟悴,服務(wù)器端渲染(SSR)至關(guān)重要陈辱。

使用服務(wù)器端渲染(SSR)時(shí)還需要有一些權(quán)衡之處:

  • 開(kāi)發(fā)條件所限。瀏覽器特定的代碼细诸,只能在某些生命周期鉤子函數(shù)(lifecycle hook)中使用沛贪;一些外部擴(kuò)展庫(kù)(external library)可能需要特殊處理,才能在服務(wù)器渲染應(yīng)用程序中運(yùn)行。

  • 涉及構(gòu)建設(shè)置和部署的更多要求利赋。與可以部署在任何靜態(tài)文件服務(wù)器上的完全靜態(tài)單頁(yè)面應(yīng)用程序(SPA)不同水评,服務(wù)器渲染應(yīng)用程序,需要處于 Node.js server 運(yùn)行環(huán)境媚送。

  • 更多的服務(wù)器端負(fù)載中燥。在 Node.js 中渲染完整的應(yīng)用程序,顯然會(huì)比僅僅提供靜態(tài)文件的 server 更加大量占用 CPU 資源(CPU-intensive - CPU 密集)塘偎,因此如果你預(yù)料在高流量環(huán)境(high traffic)下使用疗涉,請(qǐng)準(zhǔn)備相應(yīng)的服務(wù)器負(fù)載,并明智地采用緩存策略吟秩。

在對(duì)你的應(yīng)用程序使用服務(wù)器端渲染(SSR)之前咱扣,你應(yīng)該問(wèn)的第一個(gè)問(wèn)題是,是否真的需要它峰尝。這主要取決于內(nèi)容到達(dá)時(shí)間(time-to-content)對(duì)應(yīng)用程序的重要程度偏窝。例如收恢,如果你正在構(gòu)建一個(gè)內(nèi)部?jī)x表盤(pán)武学,初始加載時(shí)的額外幾百毫秒并不重要,這種情況下去使用服務(wù)器端渲染(SSR)將是一個(gè)小題大作之舉伦意。然而火窒,內(nèi)容到達(dá)時(shí)間(time-to-content)要求是絕對(duì)關(guān)鍵的指標(biāo),在這種情況下驮肉,服務(wù)器端渲染(SSR)可以幫助你實(shí)現(xiàn)最佳的初始加載性能熏矿。

#服務(wù)器端渲染 vs 預(yù)渲染(SSR vs Prerendering)

如果你調(diào)研服務(wù)器端渲染(SSR)只是用來(lái)改善少數(shù)營(yíng)銷(xiāo)頁(yè)面(例如 /, /about, /contact 等)的 SEO,那么你可能需要預(yù)渲染离钝。無(wú)需使用 web 服務(wù)器實(shí)時(shí)動(dòng)態(tài)編譯 HTML票编,而是使用預(yù)渲染方式,在構(gòu)建時(shí)(build time)簡(jiǎn)單地生成針對(duì)特定路由的靜態(tài) HTML 文件卵渴。優(yōu)點(diǎn)是設(shè)置預(yù)渲染更簡(jiǎn)單慧域,并可以將你的前端作為一個(gè)完全靜態(tài)的站點(diǎn)。

如果你使用 webpack浪读,你可以使用 prerender-spa-plugin 輕松地添加預(yù)渲染昔榴。它已經(jīng)被 Vue 應(yīng)用程序廣泛測(cè)試 - 事實(shí)上,作者是 Vue 核心團(tuán)隊(duì)的成員碘橘。

#關(guān)于此指南

本指南專注于互订,使用 Node.js server 的服務(wù)器端單頁(yè)面應(yīng)用程序渲染。將 Vue 服務(wù)器端渲染(SSR)與其他后端設(shè)置進(jìn)行混合使用痘拆,是后端自身集成 SSR 的話題仰禽,我們會(huì)在 專門(mén)章節(jié) 中進(jìn)行簡(jiǎn)要討論。

本指南將會(huì)非常深入,并且假設(shè)你已經(jīng)熟悉 Vue.js 本身吐葵,并且具有 Node.js 和 webpack 的相當(dāng)不錯(cuò)的應(yīng)用經(jīng)驗(yàn)勇边。如果你傾向于使用提供了平滑開(kāi)箱即用體驗(yàn)的更高層次解決方案,你應(yīng)該去嘗試使用 Nuxt.js折联。它建立在同等的 Vue 技術(shù)棧之上粒褒,但抽象出很多模板,并提供了一些額外的功能诚镰,例如靜態(tài)站點(diǎn)生成奕坟。但是,如果你需要更直接地控制應(yīng)用程序的結(jié)構(gòu)清笨,Nuxt.js 并不適合這種使用場(chǎng)景月杉。無(wú)論如何,閱讀本指南將更有助于更好地了解一切如何運(yùn)行抠艾。

當(dāng)你閱讀時(shí)苛萎,參考官方 HackerNews Demo 將會(huì)有所幫助,此示例使用了本指南涵蓋的大部分技術(shù)检号。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腌歉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子齐苛,更是在濱河造成了極大的恐慌翘盖,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凹蜂,死亡現(xiàn)場(chǎng)離奇詭異馍驯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)玛痊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)汰瘫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人擂煞,你說(shuō)我怎么就攤上這事混弥。” “怎么了颈娜?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵剑逃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我官辽,道長(zhǎng)蛹磺,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任同仆,我火速辦了婚禮萤捆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己俗或,他們只是感情好市怎,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著辛慰,像睡著了一般区匠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帅腌,一...
    開(kāi)封第一講書(shū)人閱讀 52,793評(píng)論 1 314
  • 那天驰弄,我揣著相機(jī)與錄音,去河邊找鬼速客。 笑死戚篙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的溺职。 我是一名探鬼主播岔擂,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼浪耘!你這毒婦竟也來(lái)了乱灵?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤点待,失蹤者是張志新(化名)和其女友劉穎阔蛉,沒(méi)想到半個(gè)月后弃舒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體癞埠,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年聋呢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苗踪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡削锰,死狀恐怖通铲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情器贩,我是刑警寧澤颅夺,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蛹稍,受9級(jí)特大地震影響吧黄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唆姐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一拗慨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦赵抢、人聲如沸剧蹂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宠叼。三九已至,卻和暖如春其爵,著一層夾襖步出監(jiān)牢的瞬間车吹,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工醋闭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窄驹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓证逻,卻偏偏與公主長(zhǎng)得像乐埠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子囚企,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361