Nuxt緩存請求

背景

在ssr的頁面中經(jīng)常需要根據(jù)數(shù)據(jù)生成頁面的情況,這種時候如果服務(wù)端可以將數(shù)據(jù)緩存起來就可以直接生成頁面,減少首屏加載時間。

基本流程

對于不需要及時更新的數(shù)據(jù)舔痕,可以將請求的結(jié)果在服務(wù)端進行緩存幾分鐘,在過期前使用緩存的數(shù)據(jù)豹缀,過期后再重新請求接口伯复,而不需要每次客戶端的頁面請求都向接口服務(wù)器獲取相同的數(shù)據(jù)。

結(jié)合需求考慮邢笙,在訪問量不大啸如、緩存數(shù)據(jù)較少的情況下,不使用redis氮惯,直接使用內(nèi)存存儲數(shù)據(jù)组底。減少開發(fā)工作。

cache-request-1.jpg

要點

Nuxt

根據(jù)需求筐骇,代碼應(yīng)在服務(wù)端進行頁面構(gòu)建前判斷是否存在緩存與數(shù)據(jù)請求,而nuxt提供了Router Middleware路由中間件江滨。

Router Middleware可以在頁面顯示前執(zhí)行函數(shù)铛纬,其中首次訪問的頁面渲染是在服務(wù)端進行的,后面通過前端路由跳轉(zhuǎn)的函數(shù)有客戶端執(zhí)行唬滑。所以在執(zhí)行邏輯前需要判斷process.server確保當前的運行環(huán)境告唆。

Router Middleware還提供了頁面context作為函數(shù)傳參,其中包含了vuex的store實例晶密,通過store就可以將數(shù)據(jù)傳遞給客戶端擒悬。

lru-cache

lru-cache是一個用于緩存的js庫,通過這個庫稻艰,我們可以實現(xiàn)設(shè)置數(shù)據(jù)新鮮度與大小限制懂牧,對于短時間內(nèi)的并發(fā)請求,還會進行合并成一個請求。

實踐

// @/utils/cache.js
const LRUCache = require('lru-cache')
const { getList } = require('./get-list')

function createCache() {
  const cache = new LRUCache({
    max: 500,  // 大小限制
    ttl: 1000 * 60 * 2, // 過期時間
    fetchMethod: getList // 請求接口函數(shù)僧凤,通過promise返回值
  })
  return cache
}

module.exports = { createCache }
// @/middleware/initData.js
import { createCache } from "@/utils/cache"

const cache = createCache()

export default async function({ store }) {
  // // 只在服務(wù)器初始化獲取blog列表
  if (process.server) {
    const list = await cache.fetch('list')
    store.commit('setList', list)
  }
}
// @/nuxt.config.js
module.exports = {
  ...
  router: {
    middleware: ['initData']
  },
  ...
}

注意

在本地通過NODE_ENV=development啟動服務(wù)時畜侦,可能出現(xiàn)緩存無效的問題,這是因為在開發(fā)環(huán)境下躯保,中間件函數(shù)不以單例模式運行旋膳,每次請求都會重新初始化lru-cache。但在生產(chǎn)環(huán)境不存在這個問題途事。

如果想要開發(fā)環(huán)境也統(tǒng)一使用緩存可以通過module自定義模塊验懊,在應(yīng)用構(gòu)建時創(chuàng)建lru-cache實例,再利用addServerMiddleware方法尸变,創(chuàng)建一個接口用于獲取緩存义图。路由中間件修改成從這個接口中獲取數(shù)據(jù)。

參考

lru-cache文檔

nuxt文檔

nuxt/sitemap源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末振惰,一起剝皮案震驚了整個濱河市歌溉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌骑晶,老刑警劉巖痛垛,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異桶蛔,居然都是意外死亡匙头,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門仔雷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蹂析,“玉大人,你說我怎么就攤上這事碟婆〉绺В” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵竖共,是天一觀的道長蝙叛。 經(jīng)常有香客問我,道長公给,這世上最難降的妖魔是什么借帘? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮淌铐,結(jié)果婚禮上肺然,老公的妹妹穿的比我還像新娘。我一直安慰自己腿准,他們只是感情好际起,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般加叁。 火紅的嫁衣襯著肌膚如雪倦沧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天它匕,我揣著相機與錄音展融,去河邊找鬼。 笑死豫柬,一個胖子當著我的面吹牛告希,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播烧给,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼燕偶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了础嫡?” 一聲冷哼從身側(cè)響起指么,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榴鼎,沒想到半個月后伯诬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡巫财,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年盗似,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片平项。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赫舒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闽瓢,到底是詐尸還是另有隱情接癌,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布扣讼,位于F島的核電站缺猛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏届谈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一弯汰、第九天 我趴在偏房一處隱蔽的房頂上張望艰山。 院中可真熱鬧,春花似錦咏闪、人聲如沸曙搬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纵装。三九已至征讲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間橡娄,已是汗流浹背诗箍。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挽唉,地道東北人滤祖。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像瓶籽,于是被迫代替她去往敵國和親匠童。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容