最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue服務(wù)端渲染添加緩存的方法

 更新時間:2018年09月18日 08:59:42   作者:光屁股的小破孩  
vue服務(wù)區(qū)緩存分為頁面緩存、組建緩存和接口緩存,本文通過實例代碼逐一給大家介紹,本文重點給大家介紹vue服務(wù)端渲染添加緩存的方法,感興趣的朋友跟隨小編一起看看吧

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

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

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

緩存

雖然 Vue 的服務(wù)器端渲染(SSR)相當(dāng)快速,但是由于創(chuàng)建組件實例和虛擬 DOM 節(jié)點的開銷,無法與純基于字符串拼接(pure string-based)的模板的性能相當(dāng)。在 SSR 性能至關(guān)重要的情況下,明智地利用緩存策略,可以極大改善響應(yīng)時間并減少服務(wù)器負載。

vue服務(wù)區(qū)緩存分為頁面緩存、組建緩存和接口緩存

頁面緩存 :

在server.js中設(shè)置

const LRU = require('lru-cache')
const microCache = LRU({
 max: 100, // 最大緩存的數(shù)目
 maxAge: 1000 // 重要提示:條目在 1 秒后過期。
})
const isCacheable = req => {
 //判斷是否需要頁面緩存
  if (req.url && req.url === '/') {
    return req.url
  } else {
   return false
  }
}
app.get('*', (req, res) => {
const cacheable = isCacheable(req)
  if (cacheable) {
    const hit = microCache.get(req.url)
     if (hit) {
    return res.end(hit)
  }
 }
const errorHandler = err => {
 if (err && err.code === 404) {
  // 未找到頁面
  res.status(404).sendfile('public/404.html');
 } else {
  // 頁面渲染錯誤
  res.status(500).end('500 - Internal Server Error')
  console.error(`error during render : ${req.url}`)
  console.error(err)
 }
}
const context = {
 title: 'vue',
 keywords: 'vue-ssr服務(wù)端腳手架',
 description: 'vue-ssr-template, vue-server-renderer',
 version: v,
 url: req.url,
 cookies: req.cookies
}
renderer.renderToString(context, (err, html) => {
 if (err) {
  return errorHandler(err)
 }
 res.end(html)
 microCache.set(req.url, html) // 設(shè)置當(dāng)前緩存頁面的內(nèi)容
})
})

組建緩存 :

在server.js中設(shè)置如下:

function createRenderer(bundle, template) {
 return require('vue-server-renderer').createBundleRenderer(bundle, {
  template,
  cache: LRU({
   max: 1000,
   maxAge: 1000 * 60 * 5 // 組建緩存時間
  })
 })
}
let renderer
if (isProd) {
 // 生產(chǎn)環(huán)境使用本地打包文件來渲染
 const bundle = require('./output/vue-ssr-bundle.json')
 const template = fs.readFileSync(resolve('./output/index.html'), 'utf-8')
 renderer = createRenderer(bundle, template)
} else {
 // 開發(fā)環(huán)境使用webpack熱更新服務(wù)
 require('./build/dev-server')(app, (bundle, template) => {
  renderer = createRenderer(bundle, template)
 })
}

要緩存的組建

export default {
 name: 'Home',
 title() {
  return {
   title: 'vue-ssr',
   keywords: 'vue-ssr服務(wù)端腳手架, home',
   description: 'vue-ssr-template, vue-server-renderer, home'
  }
 },
 created() {
 },
 computed: {},
 asyncData({ store }) {},
 methods: {},
 serverCacheKey: props => props.id
}

serverCacheKey 返回的 key 應(yīng)該包含足夠的信息,來表示渲染結(jié)果的具體情況。如果渲染結(jié)果僅由  props.item.id 決定,則上述是一個很好的實現(xiàn)。但是,如果具有相同 id 的 item 可能會隨時間而變化,或者如果渲染結(jié)果依賴于其他 prop,則需要修改  serverCacheKey 的實現(xiàn),以考慮其他變量。如果  serverCacheKey 返回常量將導(dǎo)致組件始終被緩存,這對純靜態(tài)組件是有好處的。

接口緩存:

在create-api-server.js中設(shè)置緩存

import qs from 'qs'
import axios from 'axios'
import md5 from 'md5'
import LRU from 'lru-cache'
const microCache = LRU({ 
  max: 100,
  maxAge: 5000 // 設(shè)置數(shù)據(jù)多久過期
})
export function createAPI({baseUrl, timeout}) {
let api
if (process.__API__) { api = process.__API__ } else {
// 定義全局變量 process.__API__
  api = process.__API__ = {
   get(url, params = {}) {
    const key = md5(url + JSON.stringify(params))
    // 判斷是否有緩存,直接返回緩存結(jié)果
    if (params.cache && microCache.get(key)) {
     console.log('返回緩存')
     return Promise.resolve(microCache.get(key))
    }
    return new Promise((resolve, reject) => {
     axios({
      url,
      params,
      headers: {
       'X-Requested-With': 'XMLHttpRequest'
       // 'Cookie': parseCookie(SSR.cookies)
      },
      method: 'get'
     }).then(res => {
      // 判斷是否需要緩存 如果需要緩存緩存數(shù)據(jù)
      if (params.cache && microCache) {
       microCache.set(key, res.data)
      }
      console.log('返回新數(shù)據(jù)')
      resolve(res.data)
     }).catch(error => {
      reject(error)
     })
    })
   },
   post(url, params = {}) {
    const key = md5(url + JSON.stringify(params))
    // 判斷是否有緩存,直接返回緩存結(jié)果
    if (params.cache && microCache.get(key)) {
     return Promise.resolve(microCache.get(key))
    }
    return new Promise((resolve, reject) => {
     axios({
      url,
      data: qs.stringify(params),
      method: 'post',
      headers: {
       'X-Requested-With': 'XMLHttpRequest',
       'Content-Type': 'application/x-www-form-urlencoded'
       // 'Cookie': parseCookie(SSR.cookies)
      }
     }).then(res => {
      // 判斷是否需要緩存 如果需要緩存緩存數(shù)據(jù)
      if (params.cache && microCache) {
       microCache.set(key, res.data)
      }
      resolve(res.data)
     }).catch(error => {
      reject(error)
     })
    })
   }
  }
 }
return api
}

總結(jié)

以上所述是小編給大家介紹的vue服務(wù)端渲染添加緩存的方法 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Vue Element前端應(yīng)用開發(fā)之功能點管理及權(quán)限控制

    Vue Element前端應(yīng)用開發(fā)之功能點管理及權(quán)限控制

    在一個業(yè)務(wù)管理系統(tǒng)中,如果我們需要實現(xiàn)權(quán)限控制功能,我們需要定義好對應(yīng)的權(quán)限功能點,然后在界面中對界面元素的功能點進行綁定,這樣就可以在后臺動態(tài)分配權(quán)限進行動態(tài)控制了,權(quán)限功能點是針對角色進行控制的,也就是簡稱RBAC(Role Based Access Control)。
    2021-05-05
  • vue跳轉(zhuǎn)同一個路由參數(shù)不同的問題

    vue跳轉(zhuǎn)同一個路由參數(shù)不同的問題

    這篇文章主要介紹了vue跳轉(zhuǎn)同一個路由參數(shù)不同的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue后臺返回格式為二進制流進行文件的下載方式

    vue后臺返回格式為二進制流進行文件的下載方式

    這篇文章主要介紹了vue后臺返回格式為二進制流進行文件的下載方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue-mounted中如何處理data數(shù)據(jù)

    vue-mounted中如何處理data數(shù)據(jù)

    這篇文章主要介紹了vue-mounted中如何處理data數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Ant Design Vue resetFields表單重置不生效問題及解決

    Ant Design Vue resetFields表單重置不生效問題及解決

    這篇文章主要介紹了Ant Design Vue resetFields 表單重置不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Vuejs如何通過Axios請求數(shù)據(jù)

    Vuejs如何通過Axios請求數(shù)據(jù)

    這篇文章主要介紹了Vuejs如何通過Axios請求數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue.js移動端tab組件的封裝實踐實例

    vue.js移動端tab組件的封裝實踐實例

    本篇文章主要介紹了vue.js移動端tab的封裝實踐實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • koa2+vue實現(xiàn)登陸及登錄狀態(tài)判斷

    koa2+vue實現(xiàn)登陸及登錄狀態(tài)判斷

    這篇文章主要介紹了koa2+vue實現(xiàn)登陸及登錄狀態(tài)判斷,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-08-08
  • vue中如何給靜態(tài)資源增加路由前綴

    vue中如何給靜態(tài)資源增加路由前綴

    這篇文章主要介紹了vue中如何給靜態(tài)資源增加路由前綴,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 帶你一文了解Vue生命周期鉤子

    帶你一文了解Vue生命周期鉤子

    生命周期鉤子又被叫做生命周期時間,生命周期函數(shù),生命周期鉤子就是vue生命周期中出發(fā)的各類事件,這些事件被稱為生命周期鉤子,下面這篇文章主要給大家介紹了關(guān)于Vue生命周期鉤子的相關(guān)資料,需要的朋友可以參考下
    2022-06-06

最新評論

乌兰浩特市| 开平市| 陇西县| 新津县| 浑源县| 云林县| 霸州市| 青神县| 济源市| 大余县| 卢湾区| 东兰县| 郴州市| 通化市| 清原| 剑川县| 五华县| 都兰县| 梨树县| 犍为县| 宝丰县| 白河县| 简阳市| 红原县| 伽师县| 江陵县| 顺平县| 湘潭县| 阳春市| 常宁市| 上蔡县| 呼伦贝尔市| 句容市| 日喀则市| 正宁县| 会理县| 万全县| 榆中县| 定陶县| 揭东县| 建瓯市|