细说前端打包发布后,浏览器缓存如何清理?其实只需要简单的webpack配置就行

前言

有没有这么一种场景,项目上线后,客户使用过程中发现了bug,你急急忙忙改完,发布。但你发布后

测试人员或者客户会说:“你这改了没用啊”。

你:“清下缓存试试”

客户:“????”

那么这篇文章带你认识浏览器缓存,及清除浏览器的缓存办法。让你不再为了缓存而烦恼!!

浏览器缓存

众所周知任何网页第一次打开和后面打开的速度是不一样的,如果前端没有做路由懒加载,那么会加载很多资源。但后续加载就会很快,这其中就是浏览器缓存的好处

缓存带来的好处

  • 提高网页加载速度,减少响应时间
  • 缓解服务器压力
  • 减少带宽消耗

强缓存和协商缓存

强缓存(本地缓存)

不会向服务器发送请求,直接从缓存中读取资源,强缓存可以通过设置两种 HTTP Header 实现:Expires 和 Cache-Control

  • Expires 缓存过期时间,用来指定资源到期的时间,是服务器端具体的时间点
    是 HTTP/1 的产物,受限于本地时间,如果修改了本地时间,可能会造成缓存失效
  • Cache-Control HTTP/1.1 的产物,比如当设置Cache-Control:max-age=300,单位是s,代表5分钟内再次请求就会走强缓存

协商缓存

当浏览器对某个资源的请求没有命中强缓存,就会发一个请求到服务器,验证协商缓存是否命中,如果协商缓存命中,请求响应返回的HTTP状态为304 (Not Modified),该请求不携带实体数据,若未命中,则返回200并携带资源实体数据。协商缓存是利用的是Last-Modified,If-Modified-Since和ETag、If-None-Match这两对Header来管理的

清除浏览器缓存的方式:配置webpack打包输出文件名

先来看看打包差异对比图

第一次打包:未配置

在这里插入图片描述

第二次打包:未配置

在这里插入图片描述

第一次打包:配置过后

在这里插入图片描述

第二次打包:配置过后

在这里插入图片描述

附上主要配置代码


const { defineConfig } = require('@vue/cli-service')
const timestamp = new Date().getTime()
module.exports = defineConfig({
  configureWebpack: {
    output: {
      // 修改输出js目录名及文件名
      filename: `js/[name]-test-${timestamp}.js`,
      chunkFilename: `js/[name]-test-${timestamp}.js`,
    },
  },
})

Vite配置

// vite.config.ts
export default defineConfig({
  // 其他配置
  build: {
    rollupOptions: {
      output: {
        // 使用时间戳作为文件名的一部分
        entryFileNames: `js/[name]-${timestamp}.js`,
        chunkFileNames: `js/[name]-${timestamp}.js`,
        assetFileNames: `assets/[name]-${timestamp}.[ext]`
      }
    }
  }
});

总结

由此可见,没配置过的webpack输出文件名,每次打包产生的文件是一样的,所以浏览器缓存以为还是之前的js文件,就直接从缓存获取,在项目中配置webpack打包输出文件名还是很有必要的,是杜绝发布后存在的缓存问题的最有效方式。

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
当生成二维码后,可以将其转换为图片格式保存在数据库中。在前端页面中,可以使用<img>标签来显示图片,将数据库中的图片数据转换为base64格式,然后将其作为src属性值即可。具体实现方式可以参考如下代码: ```java // 生成二维码 String content = "hello world"; int width = 200; // 图片宽度 int height = 200; // 图片高度 String format = "png"; // 图片格式 Hashtable hints = new Hashtable(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); // 保存二维码图片到数据库(假设使用MySQL) try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456"); String sql = "insert into qrcode (content, image) values (?, ?)"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, content); ByteArrayOutputStream baos = new ByteArrayOutputStream(); MatrixToImageWriter.writeToStream(bitMatrix, format, baos); byte[] imageBytes = baos.toByteArray(); ps.setBytes(2, imageBytes); ps.executeUpdate(); ps.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } ``` 在前端页面中,可以使用如下代码来显示数据库中保存的二维码图片: ```html <img src="data:image/png;base64,${base64EncodedImage}"> ``` 其中,${base64EncodedImage}是在后台将数据库中保存的二维码图片数据转换为base64格式后传递到前端的变量。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值