iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 17
0

介紹
Next.js SSR部分如果要更快,可以參考這次要介紹的作法,主角是 'lru-cache'

先設定一個 LRUCache,max 一定要記得設定沒有設定是無限大很容易GG,maxAge 快取時間基本上建議這兩個要設定

const ssrCache = new LRUCache({
  max: 100,
  maxAge: 1000 * 60 * 60 // 1hour
})

更多參數可以參考 https://www.npmjs.com/package/lru-cache

在原本route 的 res.send 的部分,就寫一個 renderAndCache的 method來代理

  server.get('/', (req, res) => {
    renderAndCache(req, res, '/')
  })

  server.get('/blog/:id', (req, res) => {
    const queryParams = { id: req.params.id }
    renderAndCache(req, res, '/blog', queryParams)
  })

代理部分也很容易理解,先把網址設定為CacheKey

 
function getCacheKey (req) {
  return `${req.url}`
}

function renderAndCache (req, res, pagePath, queryParams) {
  const key = getCacheKey(req)

  // 如果已經有cache了就直接使用 cache的資料
  if (ssrCache.has(key)) {
    console.log(`CACHE HIT: ${key}`)
    res.send(ssrCache.get(key))
    return
  }

  // 如果是第一次就跑一次必且設置一下 ssrCache
  app.renderToHTML(req, res, pagePath, queryParams)
    .then((html) => {
      // 開始設定cache
      console.log(`CACHE MISS: ${key}`)
      ssrCache.set(key, html)

      res.send(html)
    })
    .catch((err) => {
      app.renderError(err, req, res, pagePath, queryParams)
    })
}

總結

在 SSR 部分可以使用 cache 套件來幫忙加快速度,這次介紹的是'lru-cache',使用上只要在 server 加上 key 與 網頁 到 cache 中, 並且使用 getCacheKey 來 match 是不是已經有 cache過了

Next.js 官方範例可以參考
https://github.com/zeit/next.js/tree/canary/examples/ssr-caching


上一篇
NEXT.JS & Page Transitions
下一篇
Next.js & Dotenv
系列文
Next.js + 各種套件組合30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言