成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Vue組件中服務器端渲染的示例分析-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“Vue組件中服務器端渲染的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Vue組件中服務器端渲染的示例分析”這篇文章吧。

站在用戶的角度思考問題,與客戶深入溝通,找到萍鄉(xiāng)網(wǎng)站設計與萍鄉(xiāng)網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、空間域名、雅安服務器托管、企業(yè)郵箱。業(yè)務覆蓋萍鄉(xiāng)地區(qū)。

現(xiàn)在,前后端分離與客戶端渲染已經(jīng)成為前端開發(fā)的主流模式,絕大部分的前端應用都適合用這種方式來開發(fā),又特別是 React、Vue 等組件技術的發(fā)展,更是使這種方式深入人心。

但有一些應用,客戶端渲染就會遇到一些問題了:

  • 需要做 SEO(搜索引擎優(yōu)化),但客戶端渲染的 html 中幾乎沒有可用的信息

  • 需要首屏快速加載,但客戶端渲染一般是長時間的加載動畫或者白屏

如果能把客戶端渲染的組件化技術(React、Vue 等)與傳統(tǒng)的后端渲染的方式有效的結合起來,兩者兼具,那就太完美了。

所以,這次就來聊聊 Vue 組件的服務器端渲染。

根據(jù)社區(qū)現(xiàn)有的一些方案,結合自己的實踐,針對團隊技術力量的不同,說說不同應用場景選擇方案時的優(yōu)先級。

1. NodeJs 渲染中間層

一般前后端的工作流是 后端 -> 前端。

傳統(tǒng)的后端渲染模式是后端負責包括 url、接口、模板渲染等,前端與后端耦合在一起,當然這種方式正在慢慢的退出歷史舞臺。

主流的客戶端渲染則是后端只提供接口(如有需要,可以提供必要的 url),前端與后端只通過接口交流數(shù)據(jù),路由與渲染都在前端完成。

而 NodeJs 渲染中間層的工作流則是 后端 -> NodeJs -> 前端(NodeJs 渲染中間層由前端開發(fā)人員掌握)。

Vue組件中服務器端渲染的示例分析

這種模式下,后端只提供接口,傳統(tǒng)的服務器端路由(url)、模板渲染則都有 NodeJs 層接管。這樣,前端開發(fā)人員可以自由的決定哪些組件需要在服務器端渲染,哪些組件可以放在客戶端渲染,前后端完全解耦,但又保留了服務器端渲染的功能。

這種方案最成熟的是nuxt.js。

如果有需要,大家可以自己去 nuxt.js 官方文檔 看看具體的使用方法和詳細的功能。

應該說,這種方式是目前最完美的一種方案,但也有一些隱患:

  • 增加了一個 NodeJs 中間層,應用性能會有所降低

  • 增加了架構的復雜度、不穩(wěn)定性,也降低了應用的安全性

  • 對于高并發(fā)應用,NodeJs 層會很容易形成瓶頸

  • 對開發(fā)人員要求高了很多

所以,這種方式適合對并發(fā)量、安全性、穩(wěn)定性等要求不高,但又需要做 SEO 或首屏快速加載的頁面。

當然,如果你能夠自己改造相關的工具,就另當別論了。

2. 保留后端模板渲染

當不能使用 NodeJs 中間層時,而又要達到 SEO 與首屏快速響應的目的時,在傳統(tǒng)的后端模板渲染的基礎上,就需要對前端的頁面加以適當?shù)母脑臁?/p>

2.1 首屏快速響應

首屏快速響應就意味著首屏渲染所需的數(shù)據(jù)是跟 HTML 文件一起到達瀏覽器的,這些數(shù)據(jù)當前是由后端模板引擎嵌入到 HTML 頁面中的。

以 Java 的 freemarker 模板引擎為例:

html 中以 script 的方式獲取模板的數(shù)據(jù),這樣就算是在本地調(diào)試、開發(fā),也不會報錯)。

<script>
 window.globalData = {
  stringValue: '${stringValueTplName}',
  intValue: parseInt('${intValueTplName}', 10),
 };
</script>

如果是復雜的 Json 數(shù)據(jù)或者其他復雜的模板數(shù)據(jù)(比如列表數(shù)據(jù)),則可以像下面這樣接收:

<script type="text/tpl" id="tpl-script-json">
 window.tmpData = {
  jsonValue: ${jsonValueTplName},
 };
</script>

<script>
 try {
  eval(document.getElementById('tpl-script-json').innerText);
 } catch (e) {
  window.tmpData = { jsonValue: {} };
 }
 
 window.globalData = {
  jsonValue: window.tmpData.jsonValue,
 };
</script>

這樣,你就可以在組件里使用 window.globalData 的數(shù)據(jù)了,而不用另外用接口獲取數(shù)據(jù),達到加快首屏渲染的目的,而且本地開發(fā)、調(diào)試也不會報錯。

如果你使用了本地數(shù)據(jù) Mock 功能,也可以很容易的與這種方式結合在一起,只要稍加改造:

  1. 在代碼中定義本地和服務器兩個環(huán)境,本地環(huán)境使用 Mock 數(shù)據(jù),服務器環(huán)境使用 window.globalData

  2. 可以使用see-ajax, see-fetch 來簡化這種方式的開發(fā)

此外,還有一些措施來進一步加快首屏渲染:

  • 盡量減少首屏加載的腳本文件大小,其他腳本可以按需加載

  • 如果需要,可以將 CSS、JS 內(nèi)容注入到 HTML 中,這樣就只會發(fā)起一個請求,也可以加快加載速度

2.2 SEO 優(yōu)化

在上面加載首屏渲染的基礎上,對于 SEO 優(yōu)化也可以做相應的改造。

其實,在客戶端渲染已慢慢成為主流開發(fā)模式的同時,搜索引擎也在跟進這種變化。

截至目前,Google 和 Bing 可以很好對同步 JavaScript 應用程序進行索引,也就是說,即使是客戶端渲染,但只要是同步數(shù)據(jù)渲染(非 Ajax 獲取數(shù)據(jù),比如模板數(shù)據(jù)),搜索引擎也能抓取到相應的 HTML 片段。

(國內(nèi)的百度搜索與360搜索等暫時還沒有跟進動態(tài))

但為了兼容所有的搜索引擎,可以像下面改造:

先由后端模板引擎渲染一些 HTML 片段,僅給搜索引擎抓取,不作為給用戶展示的頁面

然后再由客戶端渲染同步或異步的數(shù)據(jù)給用戶展示真正的頁面

<div>
 <!-- 這里放置由后端模板引擎渲染的專給搜索引擎抓取的片段,用戶不可見 -->
</div>

<script>
 // 接收同步數(shù)據(jù)
 window.globalData = {
  stringValue: '${stringValueTplName}',
  intValue: parseInt('${intValueTplName}', 10),
 };
</script>

3. 導出靜態(tài) html

如果頁面沒有動態(tài)數(shù)據(jù),那就好辦了,直接把組件導出為靜態(tài) html,然后由客戶端激活。

具體過程可以參考 官方文檔。

這種方案比較好的是 nuxt.js generate 靜態(tài) HTML 文件。

目錄結構:

- pages/        # 頁面結構目錄
 - index.vue 
 - second.vue
 - ... 
- nuxt.config.js    # 配置文件
- package.json

- dist         # 導出靜態(tài) HTML 文件的默認目錄

導出靜態(tài) HTML 文件

npx nuxt generate

如果一個項目里有多個 pages,可以這樣構建:

目錄結構:

- nuxt.config.js    # 配置文件
- package.json

- src/
 - home/        # home 頁面 
  - pages/      # 頁面結構目錄
   - index.vue 
   - second.vue
   - ...
   
  - dist       # 導出靜態(tài) HTML 文件的默認目錄
 - about/       # about 頁面 
  - pages/      # 頁面結構目錄
   - index.vue 
   - second.vue
   - ...
   
  - dist       # 導出靜態(tài) HTML 文件的默認目錄

導出靜態(tài) HTML 文件

npx nuxt generate src/home -c ../../nuxt.config.js  # home 頁面
npx nuxt generate src/about -c ../../nuxt.config.js  # about 頁面

除了上面提到的這些方式外,當然還有其他的方式,比如:

使用 Chrome Headless 模式獲取組件的靜態(tài) HTML

以上是“Vue組件中服務器端渲染的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)成都網(wǎng)站設計公司行業(yè)資訊頻道!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享題目:Vue組件中服務器端渲染的示例分析-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://jinyejixie.com/article40/dphieo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設計公司、關鍵詞優(yōu)化網(wǎng)站維護、外貿(mào)建站自適應網(wǎng)站、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
土默特左旗| 莱州市| 克山县| 攀枝花市| 贵南县| 达拉特旗| 罗田县| 深州市| 盘山县| 泰兴市| 高邑县| 且末县| 六安市| 万荣县| 甘肃省| 衡南县| 平潭县| 庄河市| 陆川县| 汾西县| 沙洋县| 道孚县| 崇明县| 武宣县| 蒙自县| 阿克陶县| 安福县| 芒康县| 延寿县| 马鞍山市| 重庆市| 明星| 将乐县| 海宁市| 许昌县| 泰宁县| 阿鲁科尔沁旗| 湟中县| 竹山县| 平定县| 铜鼓县|