SpringBoot cache

Stella981
• 阅读 718

  昨天在部署项目时遇到一个问题,因为服务要部署到外网使用,中间经过了较多的网络传输限制,而且要加载arcgis等较大的文件,所以在部署后,发现页面loading需要很长时间,而且刷新也要重新从服务器下载文件。这当然是不能忍受的,即使在不考虑文件大小的情况下,我们也希望我们的静态文件如js, css, json, img等,可以在刷新的时候尽量不重新加载,这样我们的页面会变得更有效率即使在网络不好的状况下。

  那么问题来了:

    我们如何在刷新浏览器时,使自己的项目中的任何可控静态文件,被浏览器缓存?

  就简单说下我的思路和经历:(声明,作为一名前端,有些理解可能是跑偏的,欢迎指点。

另文章有引用看到的不错知识的连接,传送门走起~

                文中的很多思考,后端可以略过不看,因为我对后台有很多不确定性

                如果你只是想迅速知道结果,请看直达第五条后面

  1.当我获得这个需求后,我的第一个想法是从服务器端或者偏后台的的方向去寻求解决方法。但是由于我们作为一名前端开发者,我们总要先检查自己的前端是否可以完成,以及放在那一部分较好。很遗憾,前端好象对此无能为力(如果你有,欢迎指点)。此时,我们基本确定了自己需要研究的方向。

  2.最简单的方式,打开百度,我们获得的第一类相关信息为SpringMVC 配置静态资源缓存,基本思路是通过在web.xml中配置filter,还需要通过Tomcat容器进行一些过滤配置。一篇关于Tomcat下MVC静态资源强缓存配置的文章~很遗憾,SpringBoot并不支持这种在web.xml中配置过滤器,显然这不是我们需要的。

3.但我们至少缩小了我们的范围,继而我发现了页面在刷新请求资源时,使用的cache-contro为no-store.这时,由于我的SpringBoot项目,并没有进行特殊的配置,所以得出结论,如果不是SpringBoot内置的,就是通过Tomcat进行配置的。接着是另一篇传送门Tomcat配置Cache-Control~但是通过配置之后发现并没有改变这些资源的Cache-Control,所以再一次兴奋起来,你又证明了一个不太可行的方式。

4.其实很少有文章或者资源讲述SpringBoot缓存静态资源的,有一部分是将数据请求的缓存,之后又问了几个师兄,又通过百度,发现了*1.***SpringBoot可以写类似于MVC的过滤类,通过过滤配置强缓存, 2. 通过SpringBoot +redis配置**缓存我们的静态资源。这里事情来到了一个要写过滤类的代码,事情来到了一个转折,加上当时我有其他内容要修改,所以就把这个交给了我们后台的兄弟们。思路已经很清晰了,写过滤类,实现静态资源缓存。或者是更复杂的一些东西。但是实现,我就不行了。不过事情到这里并没有结束,,,因为有更好的方法

这里有一些我觉得可以了解的资源:

浏览器缓存原理

彻底理解浏览器缓存机制

浏览器三种刷新的区别

5.今天将近中午的时候,此项目前端的修改基本完成的时候,其实后台的兄弟也觉得实在不行就写Filter,但还是想找一种更合理简单的方法,我觉得这是很好的。我又继续我们自己的思考,如果有,那么一定是在SpringBoot内部进行设置,但是我们百度的总是SpringBoot和一些插件相结合进行控制(ex: EhCache),我觉得是自己对后台不理解导致的搜索盲区,最终误打误撞,找到了理想的解决方法:

通过配置application.properties

    #资源缓存时间,单位秒

    spring.resources.cache-period: 3600

# 开启gzip压缩

**spring.resources.chain.gzipped=true**

# 启用缓存

**spring.resources.chain.cache=true**

总算啰嗦完了!(想必你也是这种心情,终于听你哔哔完了)

写这篇文章算是一个记录,这个问题从昨天产生到解决中间过了大概有一天时间。但是真正思考这个问题的时间可能并没有多久,对自己能解决结果,真的是很意外。又觉得是值得记录的,因为证明了我之前有时候想的,前端和后台的开发思想,计算机思想,应该是一致的。嗯,也这么长时间没写博客了,献丑献丑~

(希望以后有时间把自己总结的前端的干货(想减少大家和我当时对前端的误解,其实前端的内容真的很多很多,就是总感觉这些大家只要看都能懂的,就总不想写。。)都能分享一下,哎~)

希望各位看官多多点赞,让我多在首页待一待好不_

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Souleigh ✨ Souleigh ✨
3年前
前端性能优化 - 雅虎军规
无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化35条军规,这样对于优化有一个比较清晰的方向.35条军规1.尽量减少HTTP请求个数——须权衡2.使用CDN(内容分发网络)3.为文件头指定Expires或CacheControl,使内容具有缓存性。4.避免空的
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这