<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        細(xì)說Vue組件的服務(wù)器端渲染的過程

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:55:54
        文檔

        細(xì)說Vue組件的服務(wù)器端渲染的過程

        細(xì)說Vue組件的服務(wù)器端渲染的過程:聲明:需要讀者對(duì) NodeJs、Vue 服務(wù)器端渲染有一定的了解 現(xiàn)在,前后端分離與客戶端渲染已經(jīng)成為前端開發(fā)的主流模式,絕大部分的前端應(yīng)用都適合用這種方式來開發(fā),又特別是 React、Vue 等組件技術(shù)的發(fā)展,更是使這種方式深入人心。 但有一些應(yīng)用,客戶端渲染
        推薦度:
        導(dǎo)讀細(xì)說Vue組件的服務(wù)器端渲染的過程:聲明:需要讀者對(duì) NodeJs、Vue 服務(wù)器端渲染有一定的了解 現(xiàn)在,前后端分離與客戶端渲染已經(jīng)成為前端開發(fā)的主流模式,絕大部分的前端應(yīng)用都適合用這種方式來開發(fā),又特別是 React、Vue 等組件技術(shù)的發(fā)展,更是使這種方式深入人心。 但有一些應(yīng)用,客戶端渲染

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

        但有一些應(yīng)用,客戶端渲染就會(huì)遇到一些問題了:

      1. 需要做 SEO(搜索引擎優(yōu)化),但客戶端渲染的 html 中幾乎沒有可用的信息
      2. 需要首屏快速加載,但客戶端渲染一般是長時(shí)間的加載動(dòng)畫或者白屏
      3. 如果能把客戶端渲染的組件化技術(shù)(React、Vue 等)與傳統(tǒng)的后端渲染的方式有效的結(jié)合起來,兩者兼具,那就太完美了。

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

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

        1. NodeJs 渲染中間層

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

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

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

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

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

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

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

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

      4. 增加了一個(gè) NodeJs 中間層,應(yīng)用性能會(huì)有所降低
      5. 增加了架構(gòu)的復(fù)雜度、不穩(wěn)定性,也降低了應(yīng)用的安全性
      6. 對(duì)于高并發(fā)應(yīng)用,NodeJs 層會(huì)很容易形成瓶頸
      7. 對(duì)開發(fā)人員要求高了很多
      8. 所以,這種方式適合對(duì)并發(fā)量、安全性、穩(wěn)定性等要求不高,但又需要做 SEO 或首屏快速加載的頁面。

        當(dāng)然,如果你能夠自己改造相關(guān)的工具,就另當(dāng)別論了。

        2. 保留后端模板渲染

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

        2.1 首屏快速響應(yīng)

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

        以 Java 的 freemarker 模板引擎為例:

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

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

        如果是復(fù)雜的 Json 數(shù)據(jù)或者其他復(fù)雜的模板數(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ù),達(dá)到加快首屏渲染的目的,而且本地開發(fā)、調(diào)試也不會(huì)報(bào)錯(cuò)。

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

        1. 在代碼中定義本地和服務(wù)器兩個(gè)環(huán)境,本地環(huán)境使用 Mock 數(shù)據(jù),服務(wù)器環(huán)境使用 window.globalData
        2. 可以使用see-ajax, see-fetch 來簡化這種方式的開發(fā)

        此外,還有一些措施來進(jìn)一步加快首屏渲染:

      9. 盡量減少首屏加載的腳本文件大小,其他腳本可以按需加載
      10. 如果需要,可以將 CSS、JS 內(nèi)容注入到 HTML 中,這樣就只會(huì)發(fā)起一個(gè)請(qǐng)求,也可以加快加載速度
      11. 2.2 SEO 優(yōu)化

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

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

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

        (國內(nèi)的百度搜索與360搜索等暫時(shí)還沒有跟進(jìn)動(dòng)態(tài))

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

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

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

        <div>
         <!-- 這里放置由后端模板引擎渲染的專給搜索引擎抓取的片段,用戶不可見 -->
        </div>
        
        <script>
         // 接收同步數(shù)據(jù)
         window.globalData = {
         stringValue: '${stringValueTplName}',
         intValue: parseInt('${intValueTplName}', 10),
         };
        </script>

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

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

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

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

        目錄結(jié)構(gòu):

        - pages/ # 頁面結(jié)構(gòu)目錄
         - index.vue 
         - second.vue
         - ... 
        - nuxt.config.js # 配置文件
        - package.json
        
        - dist # 導(dǎo)出靜態(tài) HTML 文件的默認(rèn)目錄 

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

        npx nuxt generate

        如果一個(gè)項(xiàng)目里有多個(gè) pages,可以這樣構(gòu)建:

        目錄結(jié)構(gòu):

        - nuxt.config.js # 配置文件
        - package.json
        
        - src/
         - home/ # home 頁面 
         - pages/ # 頁面結(jié)構(gòu)目錄
         - index.vue 
         - second.vue
         - ...
         
         - dist # 導(dǎo)出靜態(tài) HTML 文件的默認(rèn)目錄
         - about/ # about 頁面 
         - pages/ # 頁面結(jié)構(gòu)目錄
         - index.vue 
         - second.vue
         - ...
         
         - dist # 導(dǎo)出靜態(tài) HTML 文件的默認(rèn)目錄 

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

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

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

        使用 Chrome Headless 模式獲取組件的靜態(tài) HTML,參考 react-snap, puppeteer

        官方 vue-server-renderer 導(dǎo)出靜態(tài) HTML

        4. 總結(jié)

        因?yàn)槟J降母淖儯?wù)器端渲染與傳統(tǒng)的后端模板渲染工作方式有很大的不同,所以在開發(fā)時(shí)需要與后端開發(fā)人員做好溝通,避免認(rèn)知上的不同導(dǎo)致協(xié)作不協(xié)調(diào)。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        細(xì)說Vue組件的服務(wù)器端渲染的過程

        細(xì)說Vue組件的服務(wù)器端渲染的過程:聲明:需要讀者對(duì) NodeJs、Vue 服務(wù)器端渲染有一定的了解 現(xiàn)在,前后端分離與客戶端渲染已經(jīng)成為前端開發(fā)的主流模式,絕大部分的前端應(yīng)用都適合用這種方式來開發(fā),又特別是 React、Vue 等組件技術(shù)的發(fā)展,更是使這種方式深入人心。 但有一些應(yīng)用,客戶端渲染
        推薦度:
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 2022国内精品免费福利视频| 亚洲色大网站WWW永久网站| 永久免费无码日韩视频| 在线观看永久免费视频网站| 亚洲AV永久无码天堂影院 | 色偷偷亚洲第一综合| 四虎成人免费网站在线| 久久亚洲精品11p| 免费人成视频x8x8入口| 一级人做人a爰免费视频| 亚洲日韩精品一区二区三区| 成全动漫视频在线观看免费高清版下载| 在线观看午夜亚洲一区| 一区二区免费视频| 亚洲性无码av在线| 色窝窝免费一区二区三区| 亚洲精品国产综合久久久久紧| 日日操夜夜操免费视频| xvideos永久免费入口| 亚洲成av人片天堂网| www.免费在线观看| 亚洲国产综合AV在线观看| 亚洲精品综合久久| 午夜精品射精入后重之免费观看| 亚洲第一区视频在线观看| 在线免费观看一级片| 国产黄片不卡免费| 亚洲五月六月丁香激情| 手机在线免费视频| h视频在线免费观看| 亚洲美女视频一区| 日本特黄特色aa大片免费| 久久九九免费高清视频| 久久亚洲sm情趣捆绑调教| 尤物永久免费AV无码网站| 可以免费观看的国产视频| 亚洲一本一道一区二区三区| 精品国产亚洲男女在线线电影 | 一级毛片大全免费播放下载| 亚洲成色WWW久久网站| 歪歪漫画在线观看官网免费阅读 |