使用ehcache缓存页面、ExpiresFilter添加Expires头,大幅提升网站性能

news/2024/5/20 5:11:22/文章来源:https://blog.csdn.net/qing_gee/article/details/80236280

前几天把网站部署到服务器上后发现访问速度和龟速差不多,内心感到非常焦虑——之前并未做过这方面的尝试,要解决问题实在有些头大。

但幸好之前做过一个项目,本地访问速度感觉奇慢,但正式环境下访问速度反倒快得飞起。虽然我期初并不知晓原因,但这毕竟是解决问题的线索。

追本溯源的找,情况倒也不难办。

  1. ehcache
  2. org.apache.catalina.filters.ExpiresFilter

ehcache是我找到的一个关键信息。虽然之前我们素未谋面,但cache的中文意思是缓存,这一点英语能力我还是有的。另外,我之前写过一篇文章《为组件添加Expires头,最大化利用浏览器缓存》,虽然文章现在看来很糟糕,但至少提供了信息给我——org.apache.catalina.filters.ExpiresFilter。

利用这两点,至少暂时解决了问题,尽管ehcache我很不熟,就算是看了很多文档和博客,依然懵懵懂懂。但本着解决问题的原则,我发现我至少会用它们俩。

首先来说ehcache。

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

经过大量的调查和尝试后,找到了——SimplePageCachingFilter:

它是ehcache-web模块下页面缓存Filter的一个简单实现,适用于可以压缩的Http响应(response),如HTML、XML、JSON等。

页面缓存主要用Filter过滤器对请求的url进行过滤,如果该url在缓存中出现。那么页面数据就从缓存对象中获取,并以gzip压缩后返回。其速度是没有压缩缓存时速度的3-5倍,效率相当之高!其中页面缓存的过滤器有CachingFilter,一般要扩展filter或是自定义Filter都继承该CachingFilter。

第一步,在pom.xml文件中添加ehcache的依赖:

<!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache-core -->
<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache-core</artifactId><version>2.6.11</version>
</dependency><!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache-web -->
<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache-web</artifactId><version>2.0.4</version>
</dependency>

第二步,在classpath下新建ehcache.xml:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache><cache name="SimplePageCachingFilter" maxEntriesLocalHeap="1000" eternal="false"overflowToDisk="true" timeToIdleSeconds="120" timeToLiveSeconds="120" memoryStoreEvictionPolicy="LFU" /></ehcache>
  1. 名字必须为SimplePageCachingFilter;
  2. maxEntriesLocalHeap=”1000” : 堆内存中最大缓存对象数,0没有限制(必须设置);
  3. eternal=”false” : 对象是否永久有效,一但设置了,timeout将不起作用。 (必须设置)
  4. overflowToDisk=”false” : 当缓存达到maxElementsInMemory值时,是否允许溢出到磁盘(必须设置)(内存不足时,是否启用磁盘缓存。)
  5. timeToIdleSeconds=”120” : 导致元素过期的访问间隔(秒为单位),即当缓存闲置n秒后销毁。 当eternal为false时,这个属性才有效,0表示可以永远空闲,默认为0
  6. timeToLiveSeconds=”120” : 元素在缓存里存在的时间(秒为单位),即当缓存存活n秒后销毁. 0 表示永远存在不过期
  7. memoryStoreEvictionPolicy=”LFU” : 当达到maxElementsInMemory时,如何强制进行驱逐,默认使用”最近使用(LRU)”策略,其它还有先入先出FIFO,最少使用LFU,较少使用LRU

第三步,在web.xml中配置ehcache 页面缓存过滤器:

<!--ehcache 页面缓存过滤器 -->
<filter><filter-name>PageCachingFilter</filter-name><filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class>
</filter>
<filter-mapping><filter-name>PageCachingFilter</filter-name><url-pattern>/mec/good</url-pattern>
</filter-mapping>

这里我只添加了访问比较频繁的首页路径。

完成之后,启动tomcat,发现如下日志:

DEBUG 2018-05-08 10:37:02,920 net.sf.ehcache.constructs.web.filter.Filter: Request Headers: host -> localhost:8880: connection -> keep-alive: cache-control -> max-age=0: upgrade-insecure-requests -> 1: user-agent -> Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Mobile Safari/537.36: accept -> text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8: referer -> http://localhost:8880/zmeng/initLogin?backToUrl=http%3A%2F%2Flocalhost%3A8880%2Fzmeng%2Fmec%2Fgood: accept-encoding -> gzip, deflate, br: accept-language -> zh-CN,zh;q=0.9: cookie -> JSESSIONID=6BFDADE7284DF880D35D4866632C3FAE; Hm_lvt_82116c626a8d504a5c0675073362ef6f=1521712436,1524018865,1524206145; COOKIE_MEMBER_HEADIMAGE="http://wx.qlogo.cn/mmopen/oiazmgRzbajknOWTxtDgxibicdQcnhicNbNRiap0gOTyPWWDKwibTtlaUHDm22ibWiaAJ7ibVsjjFQibZ6j3Mcwic2g5qicUyMsC2YVFjhFM/0"; COOKIE_MEMBER=3l+5WJRuO2mF/7lj0JsJ0FSTYJEg5xaV
DEBUG 2018-05-08 10:37:02,920 net.sf.ehcache.constructs.web.filter.CachingFilter: Thread http-bio-8880-exec-13  has been marked as visited.
DEBUG 2018-05-08 10:37:02,921 net.sf.ehcache.constructs.web.filter.Filter: Request Headers: host -> localhost:8880: connection -> keep-alive: cache-control -> max-age=0: upgrade-insecure-requests -> 1: user-agent -> Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Mobile Safari/537.36: accept -> text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8: referer -> http://localhost:8880/zmeng/initLogin?backToUrl=http%3A%2F%2Flocalhost%3A8880%2Fzmeng%2Fmec%2Fgood: accept-encoding -> gzip, deflate, br: accept-language -> zh-CN,zh;q=0.9: cookie -> JSESSIONID=6BFDADE7284DF880D35D4866632C3FAE; Hm_lvt_82116c626a8d504a5c0675073362ef6f=1521712436,1524018865,1524206145; COOKIE_MEMBER_HEADIMAGE="http://wx.qlogo.cn/mmopen/oiazmgRzbajknOWTxtDgxibicdQcnhicNbNRiap0gOTyPWWDKwibTtlaUHDm22ibWiaAJ7ibVsjjFQibZ6j3Mcwic2g5qicUyMsC2YVFjhFM/0"; COOKIE_MEMBER=3l+5WJRuO2mF/7lj0JsJ0FSTYJEg5xaV
DEBUG 2018-05-08 10:37:02,921 net.sf.ehcache.constructs.web.filter.Filter: Request Headers: host -> localhost:8880: connection -> keep-alive: cache-control -> max-age=0: upgrade-insecure-requests -> 1: user-agent -> Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Mobile Safari/537.36: accept -> text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8: referer -> http://localhost:8880/zmeng/initLogin?backToUrl=http%3A%2F%2Flocalhost%3A8880%2Fzmeng%2Fmec%2Fgood: accept-encoding -> gzip, deflate, br: accept-language -> zh-CN,zh;q=0.9: cookie -> JSESSIONID=6BFDADE7284DF880D35D4866632C3FAE; Hm_lvt_82116c626a8d504a5c0675073362ef6f=1521712436,1524018865,1524206145; COOKIE_MEMBER_HEADIMAGE="http://wx.qlogo.cn/mmopen/oiazmgRzbajknOWTxtDgxibicdQcnhicNbNRiap0gOTyPWWDKwibTtlaUHDm22ibWiaAJ7ibVsjjFQibZ6j3Mcwic2g5qicUyMsC2YVFjhFM/0"; COOKIE_MEMBER=3l+5WJRuO2mF/7lj0JsJ0FSTYJEg5xaV

并且在120s之内页面上的时间并未发生改变:

这里写图片描述

120s之后再去访问的时候就发现时间已经发生了变化,并且页面被重新缓存。

尽管对ehcache非常皮毛,但总算是hello world了一次。以后我会再做新的研究并且把心得整理出来。

再来说ExpiresFilter。

 ExpiresFilter是Java servlet API 当中的一部分,它负责控制设置response当中的响应头(Expires) 和 ( Cache-Control的max-age),过期时间可以设置为相对于源文件的最后修改时间,或者浏览器的访问时间。

  这些响应头指示浏览器控制文档的缓存,如果使用了缓存,那么浏览器在下一次获取文档(HTML)的时候就会从本地缓存中获取,而不是访问实际的资源服务器,除非超过失效时间。关于HTTP头控制客户端缓存的更多介绍请参见我的另外一篇文章,http://www.cnblogs.com/daxin/p/3981553.html或者可以直接查阅HTTP协议(see RFC 2616 section 14.9)。

使用ExpiresFilter就简单得多了,虽然SimplePageCachingFilter也不麻烦。

在web.xml文件中添加ExpiresFilter,内容如下:

<filter><filter-name>ExpiresFilter</filter-name><filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class><init-param><param-name>ExpiresByType image</param-name><param-value>access plus 10 days</param-value></init-param><init-param><param-name>ExpiresByType text/css</param-name><param-value>access plus 10 days</param-value></init-param><init-param><param-name>ExpiresByType application/javascript</param-name><param-value>access plus 10 days</param-value></init-param>
</filter>
<filter-mapping><filter-name>ExpiresFilter</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher>
</filter-mapping>

其作用就是对image、css、JavaScript添加Expires头。

这里写图片描述

完成之后就可以看到css文件已经被缓存起来了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_736313.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐10个堪称神器的 Java 学习网站

经常有一些读者问我&#xff1a;“二哥&#xff0c;学习 Java 应该关注哪些网站&#xff1f;”&#xff0c;我之前的态度一直是上知乎、上搜索引擎搜一下不就知道了。但读者对我这个态度很不满意&#xff0c;他们说&#xff0c;“我在问你&#xff0c;又不是问知乎&#xff0c;…

推荐10个堪称神器的学习网站

每天都会收到很多读者的私信&#xff0c;问我&#xff1a;“二哥&#xff0c;有什么推荐的学习网站吗&#xff1f;最近很浮躁&#xff0c;手头的一些网站都看烦了&#xff0c;想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦&#xff0c;梦到被老板辞退了。虽然说在我们公…

作为程序员的他,大学四年一直自学,全靠这些实用工具和学习网站!

二哥&#xff0c;你好&#xff0c;马上 6 月份就要毕业了。非常感谢这些年来二哥的鼓励&#xff0c;你的那些文章我基本上都看了&#xff0c;尤其是程序人生方面的文章给我启迪很大。大学四年&#xff0c;我没有白过&#xff0c;虽然专业不是程序员&#xff0c;但我喜欢这个行业…

超实用的工具、素材、学习网站分享

文章目录------------------------------学习教程篇-------------------------------bilibili哔哩哔哩网易云课堂siki学院&#xff1a;泰课在线&#xff1a;可汗学院&#xff1a;线性代数的本质 - bilibili计算机科学速成课 - bilibiliLearnOpenGL&#xff1a;The Book of Shad…

大学四年,因为这些网站,他顺利拿下字节跳动的offer!

回想起大学的日子&#xff0c;我不免觉得有些羞愧&#xff0c;因为我把它虚度了&#xff0c;除了谈了个女朋友&#xff0c;几乎一无所获&#xff0c;我是个彻彻底底的学渣。但我有一个读者&#xff0c;小王&#xff0c;他就是最佳的励志典范&#xff0c;大一还挂科了三门&#…

老板急坏了,公司网站的 HTTPS 过期了

端午出去玩的时候&#xff0c;老板打电话说公司网站的 HTTPS 过期了&#xff0c;访问不了&#xff08;见下图&#xff09;&#xff0c;要我立马升级一下。可惜我当时没带电脑&#xff0c;无能为力&#xff0c;可把老板急坏了。 没办法&#xff0c;急就先急着&#xff0c;只能等…

mfc之clistctrl导出excel_Excel函数:SEO这个站长帮手,你在用吗?

在SEO工作中&#xff0c;我们每天都会使用大量的站长工具&#xff0c;其中&#xff0c;Excel函数&#xff0c;是我们发现做一些SEO基础数据分析得力的站长帮手。 在以往的数据统计中&#xff0c;我们经常会利用到Excel排序、筛选、去重等一系列可使用的函数&#xff0c;但对于站…

企业网站 源码 mail:_分享一些好用的网站(二)

前言半年前写了一篇《分享一些好用的网站》记录了我之前常用的一些网站&#xff0c;现在过去半年&#xff0c;收藏夹也多了一些网站&#xff0c;特地记录下来&#xff0c;希望能对你有所帮助。由于这些网站都比较杂&#xff0c;我也懒得分类了。太长不看版临时邮箱 https://tem…

再见 HTTP?10 分钟手把手教会你将网站切换到 HTTPS,安全有保障,yyds!

CSDN 的小伙伴们&#xff0c;大家好&#xff0c;我是刚脱离险境的二哥呀&#xff01; 很久&#xff08;大概两年&#xff09;之前&#xff0c;我就搞了一个独立的个人博客网站&#xff0c;长下面这样。 大家有访问过的&#xff0c;可以在评论区扣 1 可惜一直没搞备案和 HTTPS…

3 年9.9元,网站从HTTP升级到HTTPS

上一次,我们完成域名解析后,发现浏览器地址栏里的域名被提示为不安全,就是因为它还是个宝宝,没有升级为 HTTPS 证书。 那怎么升级为 HTTPS 证书呢?可以直接通过阿里云购买 SSL 证书,但特么巨贵! 本来想尝试一下 AWS 的免费 SSL 证书,但卡到验证码这一步就是收不到信息…

完了,二哥网站的图片挂了

二哥的编程知识星球正式开放了&#xff0c;这是一个Java学习指南编程实战的学习宝地&#xff0c;可以帮助你提高编程能力、养成好的学习习惯、找到志同道合的学习伙伴、拿到更好的 Offer。详情戳链接&#x1f517;《Java程序员进阶之路》! 大家好&#xff0c;我是二哥&#xff…

mysql负载导致网站访问高_MySQL负载高导致网站访问慢解决实例

今日发现网站访问慢&#xff0c;一次进行了排查&#xff0c;开始思路混乱&#xff0c;下面来梳理下一、故障分析首先&#xff0c;判断访问慢现象&#xff0c;是个人还是集体&#xff1f;&#xff1f;&#xff1f;个人现象排查&#xff1a;检查个人网络&#xff0c;pc&#xff0…

网站被腾讯停止访问人工服务器,网站被腾讯屏蔽怎么办?实测多种解封方式

前两天不知道怎么搞的&#xff0c;腾讯把我的一个网站给报毒了&#xff0c;在 QQ 和微信里都进行了屏蔽&#xff0c;无法访问。给出的原因是“该网站有未经证实的境外博彩内容”。作为一个负责任的站长&#xff0c;我建站这么多年来一直都是兢兢业业&#xff0c;从未发布过任何…

seo网站自动发布链接工具_死链接是什么?会影响网站seo吗?检测方法与测试工具又有哪些?...

前些天基于企业网站seo需求&#xff0c;调整网站标题title及确定网站标题统一规范&#xff0c;顺便再检查了一下死链接。一检查&#xff0c;发现就有漏网之鱼。什么是死链接&#xff1f;先说一下什么是死链接。顾名思义&#xff0c;死链接就是死的链接嘛。当你点开一个链接&…

java使用token访问url一直携带token认证_SpringBoot入门建站全系列(十二)Spring Security使用token做认证...

SpringBoot入门建站全系列&#xff08;十二&#xff09;Spring Security使用token做认证Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架&#xff0c;提供了一套 Web 应用安全性的完整解决方案。一般来说&#xff0c;Web 应用的安全性包括…

iframe src 不加载页面_五种方法延迟加载图像,以获得更好的网站性能

lazy-load由于图像是Web上最重要的内容之一&#xff0c;因此网站上的页面加载时间很容易成为问题。即使进行了适当的优化&#xff0c;图像也可能会很重。这会对访问者必须等待才能访问您网站上的内容的时间产生负面影响。除非您想出一种不会影响速度感知的图像加载解决方案&…

seo自动发外链_怎么找高质量外链资源(如何找发外链平台)

如今&#xff0c;搜索引擎越来越关注外部链接的质量。作为seo外部链接成员&#xff0c;我们如何获得高质量的外链资源&#xff1f; 我可以向您保证&#xff0c;大多数网站管理员在寻找高质量的外链资源时都会头疼。每天只知道要发布多少个大型平台&#xff0c;但这真的可以吗&a…

蓝科响应式网站模板php_简约现代风格的房地产响应式设计网站模板

哈喽&#xff01;大家好&#xff0c;这里公众号&#xff0c;Adobe素材助手。简约现代风格的房地产响应式设计网站模板&#xff0c;可以自定义无限的可能性。因为我们包含了UI准则来维护设计风格。因此&#xff0c;如果您想在部分&#xff0c;页面或其他内容上添加任何内容&…

【Firefox插件】Firebug:能够调试所有网站语言

Javascript 的调试&#xff0c; 是开发 Web 应用尤其是 AJAX 应用很重要的一环&#xff0c; 目前对 Javascript 进行调试的工具很多&#xff0c; 我比较喜欢使用的是 Firebug 。Firebug 是 Joe Hewitt 开发的一套与 Firefox 集成在一起的功能强大的 web 开发工具&#xff0c…

网站大型服务器价格,大型网站服务器价格

大型网站服务器价格 内容精选换一换3月&#xff0c;跳不动了&#xff1f;>>>当下的时代&#xff0c;人们对于网络安全方面的意识在不断的加强&#xff0c;给网站部署配置服务器证书(即SSL证书)之后&#xff0c;网站的通信协议就是加密的&#xff0c;也保障了网站的安全…