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

webpack+express實現(xiàn)文件精確緩存的示例代碼

 更新時間:2020年06月11日 09:31:33   作者:woai3c  
這篇文章主要介紹了webpack+express實現(xiàn)文件精確緩存的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

  • index.html 設置成 no-cache,這樣每次請求的時候都會比對一下 index.html 文件有沒變化,如果沒變化就使用緩存,有變化就使用新的 index.html 文件。
  • 其他所有文件一律使用長緩存,例如設置成緩存一年 maxAge: 1000 * 60 * 60 * 24 * 365。
  • 前端代碼使用 webpack 打包,根據(jù)文件內(nèi)容生成對應的文件名,每次重新打包時只有內(nèi)容發(fā)生了變化,文件名才會發(fā)生變化。

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

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

小知識:

  • max-age: 設置緩存存儲的最大周期,超過這個時間緩存被認為過期(單位秒)。在這個時間前,瀏覽器讀取文件不會發(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: 用于控制哪些模塊被這個緩存組匹配到。原封不動傳遞出去的話,它默認會選擇所有的模塊??梢詡鬟f的值類型:RegExp、String和Function;
  • priority:表示抽取權重,數(shù)字越大表示優(yōu)先級越高。因為一個 module 可能會滿足多個 cacheGroups 的條件,那么抽取到哪個就由權重最高的說了算;
  • reuseExistingChunk:表示是否使用已有的 chunk,如果為 true 則表示如果當前的 chunk 包含的模塊已經(jīng)被抽取出去了,那么將不會重新生成新的。
  • minChunks(默認是1):在分割之前,這個代碼塊最小應該被引用的次數(shù)(譯注:保證代碼塊復用性,默認配置的策略是不需要多次引用也可以被分割)
  • chunks (默認是async) :initial、async和all
  • name(打包的chunks的名字):字符串或者函數(shù)(函數(shù)可以根據(jù)條件自定義名字)

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

express 設置

app.use((req, res, next) => { // 將 index.html 設為 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設為根目錄

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

參考資料

webpack 緩存
一步一步的了解webpack4的splitChunk插件

到此這篇關于webpack+express實現(xiàn)文件精確緩存的示例代碼的文章就介紹到這了,更多相關webpack+express文件精確緩存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • uniapp小程序和h5如何使用three.js詳解

    uniapp小程序和h5如何使用three.js詳解

    Three.js是通過對WebGL接口的封裝與簡化而形成的一個易用的圖形庫,下面這篇文章主要給大家介紹了關于uniapp小程序和h5如何使用three.js的相關資料,需要的朋友可以參考下
    2022-12-12
  • Chrome瀏覽器的alert彈窗禁止再次彈出后恢復的方法

    Chrome瀏覽器的alert彈窗禁止再次彈出后恢復的方法

    本文主要介紹了Chrome瀏覽器的alert彈窗禁止再次彈出后恢復的方法。具有一定的參考價值,下面跟著小編一起來看下吧
    2016-12-12
  • easyUI實現(xiàn)(alert)提示框自動關閉的實例代碼

    easyUI實現(xiàn)(alert)提示框自動關閉的實例代碼

    下面小編就為大家?guī)硪黄猠asyUI實現(xiàn)(alert)提示框自動關閉的實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • JavaScript中的方法重載實例

    JavaScript中的方法重載實例

    這篇文章主要介紹了JavaScript中的方法重載實例,本文直接給出重載實例,需要的朋友可以參考下
    2015-03-03
  • 前端判斷對象為空的6種方法舉例

    前端判斷對象為空的6種方法舉例

    在前端中可以使用多種方法來判斷一個對象是否為空,這篇文章主要給大家介紹了關于前端判斷對象為空的6種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • Javascript改變CSS樣式(局部和全局)

    Javascript改變CSS樣式(局部和全局)

    改變CSS樣式分為局部和全局,下面為大家介紹下使用Javascript具體的實現(xiàn),感興趣的朋友可以參考下
    2013-12-12
  • javascript實現(xiàn)數(shù)組扁平化六種技巧總結

    javascript實現(xiàn)數(shù)組扁平化六種技巧總結

    這篇文章主要為大家詳細介紹了六種javascript中實現(xiàn)數(shù)組扁平化的技巧,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解下
    2023-12-12
  • 旺旺在線客服代碼 旺旺客服代碼生成器

    旺旺在線客服代碼 旺旺客服代碼生成器

    很多朋友想在網(wǎng)站上插入自己的阿里旺旺在線聯(lián)系圖片,就像是和QQ一樣,小編為大家詳細講解了旺旺在線客服代碼以及旺旺客服代碼生成器,希望能夠幫助到大家。
    2018-01-01
  • js匿名函數(shù)使用&傳參(實例)

    js匿名函數(shù)使用&傳參(實例)

    下面小編就為大家?guī)硪黄猨s匿名函數(shù)使用&傳參(實例)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • JavaScript的內(nèi)置對象Math和字符串詳解

    JavaScript的內(nèi)置對象Math和字符串詳解

    這篇文章主要為大家介紹了JavaScript的內(nèi)置對象Math和字符串,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11

最新評論

喜德县| 北安市| 隆尧县| 沙湾县| 南平市| 惠州市| 万全县| 龙里县| 保康县| 红桥区| 开鲁县| 繁峙县| 嫩江县| 西丰县| 藁城市| 黎城县| 军事| 金堂县| 宜良县| 富平县| 禄丰县| 宜昌市| 潜江市| 西乌珠穆沁旗| 青海省| 平江县| 和龙市| 锡林浩特市| 喀什市| 松桃| 汕头市| 大安市| 呈贡县| 扎鲁特旗| 乐亭县| 乐昌市| 曲周县| 辰溪县| 长泰县| 黎平县| 抚顺市|