日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

express给html设置缓存,webpack + express 实现文件精确缓存

發(fā)布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 express给html设置缓存,webpack + express 实现文件精确缓存 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

由于最近開發(fā)的個人博客(Vue + node)在使用過程中,發(fā)現(xiàn)網(wǎng)絡(luò)加載有點慢,所以打算對它進行一次優(yōu)化。本次優(yōu)化的目標如下:

index.html 設(shè)置成 no-cache,這樣每次請求的時候都會比對一下 index.html 文件有沒變化,如果沒變化就使用緩存,有變化就使用新的 index.html 文件。

其他所有文件一律使用長緩存,例如設(shè)置成緩存一年 maxAge: 1000 * 60 * 60 * 24 * 365。

前端代碼使用 webpack 打包,根據(jù)文件內(nèi)容生成對應(yīng)的文件名,每次重新打包時只有內(nèi)容發(fā)生了變化,文件名才會發(fā)生變化。

以上三點結(jié)合,就能實現(xiàn)文件的精確緩存。

換句話說,在一年內(nèi),如果我的個人博客沒有進行任何更新,那同一臺電腦在這段時間內(nèi)訪問網(wǎng)站不會發(fā)起任何請求;如果有某個文件更新了,只會請求新的文件,舊的文件依舊從緩存讀取。

小知識:

max-age: 設(shè)置緩存存儲的最大周期,超過這個時間緩存被認為過期(單位秒)。在這個時間前,瀏覽器讀取文件不會發(fā)出新請求,而是直接使用緩存。

指定 no-cache 表示客戶端可以緩存資源,每次使用緩存資源前都必須重新驗證其有效性。

webpack 打包

根據(jù)文件內(nèi)容生成文件名

通過配置 output 的 filename 屬性可以實現(xiàn)這個需求。filename 屬性的值選項中有一個 [contenthash],它將根據(jù)文件內(nèi)容創(chuàng)建出唯一 hash。當文件內(nèi)容發(fā)生變化時,[contenthash] 也會發(fā)生變化。

output: {

filename: '[name].[contenthash].js',

chunkFilename: '[name].[contenthash].js',

path: path.resolve(__dirname, '../dist'),

},

提取第三方庫

由于引入的第三方庫一般都比較穩(wěn)定,不會經(jīng)常改變。所以將它們單獨提取出來,作為長期緩存是一個更好的選擇。

這里需要使用 webpack4 的 splitChunk 插件 cacheGroups 選項。

optimization: {

runtimeChunk: {

name: 'manifest' // 將 webpack 的 runtime 代碼拆分為一個單獨的 chunk。

},

splitChunks: {

cacheGroups: {

vendor: {

name: 'chunk-vendors',

test: /[\\/]node_modules[\\/]/,

priority: -10,

chunks: 'initial'

},

common: {

name: 'chunk-common',

minChunks: 2,

priority: -20,

chunks: 'initial',

reuseExistingChunk: true

}

},

}

},

test: 用于控制哪些模塊被這個緩存組匹配到。原封不動傳遞出去的話,它默認會選擇所有的模塊。可以傳遞的值類型:RegExp、String和Function;

priority:表示抽取權(quán)重,數(shù)字越大表示優(yōu)先級越高。因為一個 module 可能會滿足多個 cacheGroups 的條件,那么抽取到哪個就由權(quán)重最高的說了算;

reuseExistingChunk:表示是否使用已有的 chunk,如果為 true 則表示如果當前的 chunk 包含的模塊已經(jīng)被抽取出去了,那么將不會重新生成新的。

minChunks(默認是1):在分割之前,這個代碼塊最小應(yīng)該被引用的次數(shù)(譯注:保證代碼塊復(fù)用性,默認配置的策略是不需要多次引用也可以被分割)

chunks (默認是async) :initial、async和all

name(打包的chunks的名字):字符串或者函數(shù)(函數(shù)可以根據(jù)條件自定義名字)

除了提取第三方庫外,結(jié)合 Vue 使用 import 動態(tài)引入組件還能實現(xiàn)按需加載。

express 設(shè)置

app.use((req, res, next) => { // 將 index.html 設(shè)為 no-cache

if(req.url == '/') {

res.setHeader('Cache-control', 'no-cache')

}

next()

})

app.use(express.static('dist', {

etag: false,

maxAge: 1000 * 60 * 60 * 24 * 365, // 緩存一年

})) // 將dist設(shè)為根目錄

詳細的代碼可以看一下我的個人博客項目。

參考資料

webpack 緩存

一步一步的了解webpack4的splitChunk插件

關(guān)于找一找教程網(wǎng)

本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。

本站提供了軟件編程、網(wǎng)站開發(fā)技術(shù)、服務(wù)器運維、人工智能等等IT技術(shù)文章,希望廣大程序員努力學習,讓我們用科技改變世界。

[webpack + express 實現(xiàn)文件精確緩存]http://www.zyiz.net/tech/detail-139185.html

總結(jié)

以上是生活随笔為你收集整理的express给html设置缓存,webpack + express 实现文件精确缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。