您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關服務器端渲染的使用方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
頁面渲染方式
前段時間了解到頁面有幾種渲染方式:SPA SSR,以前寫的一個網站但是用的渲染方式是 SPA,導致搜索引擎爬蟲抓不到任何信息,對 SEO 優化不很好,本想改成 SSR,但是改動配置很多,弄來弄去怕影響開發,今天在 Vue 官網看到預渲染,今天試了下,感覺是一個折中的方法,而且配置改動不大,大家可以試試
什么是服務器端渲染 (SSR)?
簡單理解是將組件或頁面通過服務器生成html字符串,再發送到瀏覽器,最后將靜態標記"混合"為客戶端上完全交互的應用程序
SSR的優勢
1. 更利于SEO。
不同爬蟲工作原理類似,只會爬取源碼,不會執行網站的任何腳本(Google除外,據說Googlebot可以運行javaScript)。使用了React或者其它MVVM框架之后,頁面大多數DOM元素都是在客戶端根據js動態生成,可供爬蟲抓取分析的內容大大減少(如圖一)。另外,瀏覽器爬蟲不會等待我們的數據完成之后再去抓取我們的頁面數據。服務端渲染返回給客戶端的是已經獲取了異步數據并執行JavaScript腳本的最終HTML,網絡爬中就可以抓取到完整頁面的信息。
2. 更利于首屏渲染
首屏的渲染是node發送過來的html字符串,并不依賴于js文件了,這就會使用戶更快的看到頁面的內容。尤其是針對大型單頁應用,打包后文件體積比較大,普通客戶端渲染加載所有所需文件時間較長,首頁就會有一個很長的白屏等待時間。
使用服務器端渲染 (SSR) 時還需要有一些權衡之處:
在對你的應用程序使用服務器端渲染 (SSR) 之前,你應該問的第一個問題是,是否真的需要它。這主要取決于內容到達時間 (time-to-content) 對應用程序的重要程度。例如,如果你正在構建一個內部儀表盤,初始加載時的額外幾百毫秒并不重要,這種情況下去使用服務器端渲染 (SSR) 將是一個小題大作之舉。然而,內容到達時間 (time-to-content) 要求是絕對關鍵的指標,在這種情況下,服務器端渲染 (SSR) 可以幫助你實現最佳的初始加載性能。
服務器端渲染 vs 預渲染 (SSR vs Prerendering)
如果你調研服務器端渲染 (SSR) 只是用來改善少數營銷頁面(例如 /, /about, /contact 等)的 SEO,那么你可能需要預渲染。無需使用 web 服務器實時動態編譯 HTML,而是使用預渲染方式,在構建時 (build time) 簡單地生成針對特定路由的靜態 HTML 文件。優點是設置預渲染更簡單,并可以將你的前端作為一個完全靜態的站點。
如果你使用 webpack,你可以使用 prerender-spa-plugin 輕松地添加預渲染。它已經被 Vue 應用程序廣泛測試 - 事實上,作者是 Vue 核心團隊的成員。
使用方法
vue-router 必須是 history 模式
const router = new VueRouter({ mode: 'history', routes: [...] })
安裝預渲染核心:prerender-spa-plugin
yarn add prerender-spa-plugin -D
在 vue.config.js 配置(低版本 vue 寫在 build/webpack.prod.conf.js)
const PrerenderSPAPlugin = require('prerender-spa-plugin') const Renderer = PrerenderSPAPlugin.PuppeteerRenderer module.exports={ // 因為高版本Vue將配置文件整合到了vue.config.js,所以原先寫在webpack配置里的都需要寫在configureWebpack里 configureWebpack: { // plugins插件里書寫 plugins: [ new PrerenderSPAPlugin({ // 生成文件的路徑,這個目錄只能有一級。若目錄層次大于一級,在生成的時候不會有任何錯誤提示,在預渲染的時候只會卡著不動 staticDir: path.join(__dirname, './dist'), // 對應自己的路由文件 routes: [ '/', '/article'], // 若沒有這段則不會進行預編譯 renderer: new Renderer({ inject: { foo: 'bar' }, headless: false, // 在 main.js 中 document.dispatchEvent(new Event('render-event')),兩者的事件名稱要對應上。 renderAfterDocumentEvent: 'render-event' }) }), ] } }
在 mian.js 配置,在 mounted 函數里增加 document.dispatchEvent (new Event (‘render-event'))
new Vue({ el: '#app', router, store, render:h=>h(App), mounted(){ document.dispatchEvent(new Event('render-event')) } })
yarn run build 打包項目,看到自己的頁面被提前生成就 OK 了
安裝 vue-meta-info 插件,網頁 meta 標簽
yarn 安裝
yarn add vue-meta-info
在 mian.js 配置
import MetaInfo from 'vue-meta-info' Vue.use(MetaInfo)
在 XXOO.vue 文件中配置
export default { // 這些代碼會轉成網頁的meta標簽里的內容 metaInfo: { title: '標題', meta: [ { name: 'keywords', content: '關鍵字' }, { name: 'description', content: '網頁描述' } ] }
看完上述內容,你們對服務器端渲染的使用方法有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。