NodeJS笔记

web开发中缓存优化

2018-01-06  本文已影响0人  JTR354

浏览器缓存

Expires (Expires:Thu, 30 Dec 2027 11:02:20 GMT)
Cache-Control (Cache-Control:max-age=315360000)

If-Modified-Since / Last-Modified (Last-Modified:Wed, 22 Jun 2011 06:40:43 GMT)
If-None-Match / Etag (Etag:"2c1-4a6473f6030c0")

缓存实现流程

//配置缓存参数
cache: {
    maxAge: 600,
    expires: true,
    cacheControl: true,
    lastModified: true,
    etag: true
}
//定义缓存函数
const {cache} = require('../config/defaultConfig')

function refreshRes(stats,res) {
    if(cache.expires){
        res.setHeader('Expires',(new Date(Date.now() + cache.maxAge*1000)).toUTCString())
    }
    if(cache.cacheControl){
        res.setHeader('Cache-Control',`public,max-age=${cache.maxAge}`)

    }
    if(cache.lastModified){
        res.setHeader('Last-Modified',stats.mtime.toUTCString())
    }
    if(cache.etag){
        res.setHeader('ETag',`${stats.size}-${stats.mtime}`)
    }

}

module.exports = function (stats,req,res) {

    refreshRes(stats,res)

    const lastModified = req.headers['if-modified-since']
    const etag = req.headers['if-none-match']

    if(!lastModified && !etag){
        return false
    }
    const aaa = res.getHeaders()['last-modified']
    if(lastModified && lastModified !== res.getHeaders()['last-modified']){
        return false
    }

    if(etag && etag !== res.getHeaders()['etag']){
        return false
    }

    return true

}
//判断是否使用缓存
const isUseCache = require('../handle/cache')
if(isUseCache(stats,req,res)){
    res.statusCode = 304
    res.end()
    return
}

上一篇 下一篇

猜你喜欢

热点阅读