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

news/2024/5/15 10:18:39/文章来源:https://blog.csdn.net/weixin_34274029/article/details/89591973
版权声明:欢迎转载,请注明沉默王二原创。 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_818996.aspx

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

相关文章

网站流量日志数据自定义采集

1&#xff0e; 原理分析首先&#xff0c;用户的行为会触发浏览器对被统计页面的一个http请求&#xff0c;比如打开某网页。当网页被打开&#xff0c;页面中的埋点javascript代码会被执行。埋点是指&#xff1a;在网页中预先加入小段javascript代码&#xff0c;这个代码片段一般…

Slog44_支配vue框架初阶项目之博客网站-单页-客户端与服务端上传功能关联

ArthurSlogSLog-44Year1GuangzhouChinaAug 22th 2018GitHub掘金主页简书主页segmentfault人们会渐渐爱上压迫 崇拜那些使他们丧失思考能力的工业产物 开发环境MacOS(High Sierra 10.13.5) 需要的信息和信息源&#xff1a; HTTP概述HTTP互联网是如何工作的万维网是如何工作的统一…

《大型网站技术架构》读书笔记之六:永无止境之网站的伸缩性架构

此篇已收录至《大型网站技术架构》读书笔记系列目录贴&#xff0c;点击访问该目录可获取更多内容。 首先&#xff0c;所谓网站的伸缩性&#xff0c;指不需要改变网站的软硬件设计&#xff0c;仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力。在整个互联网行…

(SpringMvc,BootStrap,Mysql)酒店旅游网站

【项目功能】 根据需求&#xff0c;确定系统采用JSP技术&#xff0c; SQL Server 2008作为数据库。整个系统要操作方便、易于维护、灵活实用。主要实现了个人中心、首页轮播管理、景区/线路管理、客户管理、酒店门票分类管理、酒店门票管理、帖子管理、帖子回复管理、售后维权…

我是计算机专业,技能一般,女生,大四,准备毕业设计,我想问是不是网站设计简单一些呢?

做网站吧。前端都是使用的htmljscss的方式做的&#xff0c;主要的区别来自于后台。后台可以选择语言比较多&#xff0c;java、python、php、asp其中php是最简单的。Php的环境搭建也简单&#xff0c;文件比较少。用php还不和java一样&#xff0c;java需要导包配置jdk等等&#x…

【计算机毕业设计】基于ssm家校通网站系统

源码交流、毕设帮助、技术指导&#xff0c;见文末。 随着网络技术的飞速发展&#xff0c;网络已渗透到全人类的各个方面&#xff0c;深刻影响着我们的生活和工作方式。家校通网站给教育带来了更广阔的发展空间。家校通网站有对部分类似网站进行分析&#xff0c;找到规律和方法…

【计算机毕业设计】基于springboot个人博客网站

所有的软件开发前都需要进行需求调研和分析&#xff0c;在个人博客系统系统中前台用户需要能够浏览已发布的博客文章&#xff0c;并能在文章底部进行评论互动&#xff0c;后台管理人员登录系统需要能够对系统功能方面的信息进行管理&#xff0c;针对个人博客系统的需求分析有以…

【计算机毕业设计】java ssm+jsp 旅游网站的设计与实现

本旅游管理系统主要包括系统用户管理模块、景点信息管理模块、变幻图管理、旅游线路管理、登录模块、和退出模块等多个模块。采用目前最流行的ssm框架结构和java中流行的ssm框架和myeclipse编辑器、MySQL数据库设计并实现的 。 本系统主要包含了等系统用户管理、景点信息管理…

【计算机毕业设计】java ssm+vue婚纱影楼摄影网站

源码交流及指导、毕设帮助 见文末 本站不同于其它摄影网站&#xff0c;本网站不但可以展示本店的摄影作品&#xff0c;更可以列出众多摄影套餐供用户选择预约&#xff0c;用户看中哪款套餐了&#xff0c;可以预约时间进行拍摄&#xff0c;即增加了店内本身的业务量&#xff0c;…

【计算机毕业设计】jsp+ssm某地区精准扶贫网站(可更改为任意地区)

本精准扶贫网站管理系统主要包括系统用户管理模块、捐赠信息管理模块、投诉信息管理、扶贫资讯管理、登录模块、和退出模块等多个模块,系统基于mvc设计模式,数据库选用的是Mysql数据库&#xff0c;采用Java语言中的SSM(springMvcspringMybatis)框架进行后端开发,JSP主要用于前端…

【计算机毕业设计】ssm+jsp二手车交易网站

毕设帮助、技术指导、源码交流&#xff0c;联系方式见文末。。 二手车交易网站采用B/S模式&#xff0c;促进了二手车交易网站的安全、质量、快捷的发展。传统的管理模式还处于手工处理阶段&#xff0c;管理效率极低&#xff0c;随着用户的不断增多&#xff0c;传统基于手工管理…

【计算机毕业设计】基于springboot的景区旅游网站

随着“互联网”加速与产业融合&#xff0c;数字经济已成为中国发展的新引擎。在旅游产业也不例外&#xff0c;相关数据显示&#xff0c;“互联网旅游”孕育一个新的庞大旅游市场。这个新型市场由网民购买力购买欲望组成。根据最新的互联网发展状况统计报告&#xff0c;截至今年…

【计算机毕业设计】基于java web的校友同学网站

校友资源是高校建设和校友个人发展的宝贵潜在财富&#xff0c;但是历届毕业生离校后&#xff0c;随着时间的推移以及生活繁忙的原因&#xff0c;他们渐渐的忽略了与校友们和母校的联系&#xff0c;基于这种现状&#xff0c;设计并实现B/S架构的校友信息系统应运而生。 校友同学…

3dsmax子菜单无法选择_向大疆无人机学习:在WordPress网站的divi主题中添加悬浮固定二级菜单...

我们WP花园为客户提供深度定制WordPress网站设计开发的过程中&#xff0c;经常会为购买了高级定制服务的客户提供一些个性化模块功能开发。最近&#xff0c;我们有一个WordPress网站建站客户&#xff0c;想要仿制大疆无人机产品详情页里面的固定菜单二级目录的样式&#xff0c;…

seo查询工具源码_SEO关键词查询工具,SEO辅助工具

上一篇给大家分享了四个好用的SEO工具&#xff0c;今天继续给大家推荐几个不错的网站。一&#xff1a;网站安全检测1&#xff1a;百度安全检测&#xff1a;这个是大家一定要熟悉的安全检测平台。已经引用腾讯、小红伞、金山、知道创宇的数据库&#xff0c;假设你的网站在搜索结…

php安装与下载,学习PHP网站开发 连载——PHPCMS的下载与安装详解

原标题&#xff1a;学习PHP网站开发 连载——PHPCMS的下载与安装详解首先是要下载&#xff0c;然后安装&#xff0c;才能在本地学习和调试1&#xff1a;下载PHPCMS官网地址&#xff1a;www.phpcms.cn接着点击&#xff1a;下载结果&#xff1a;解压缩&#xff1a;进入该目录&…

服务器banner是什么_选择网站建设公司应该注意什么?

近期有不少客户咨询我们时都问了同样的问题&#xff1a;“南京网站建设这块真的好复杂&#xff0c;什么价格都有&#xff0c;从几百到几万&#xff0c;到底应该怎么选择网站建设公司呢&#xff1f;”其实从价格角度来说&#xff0c;我们在《建设一个企业网站需要多少钱呢&#…

chm文件在服务器看不到内容,电脑不能打开文件secedit.chm怎么办_网站服务器运行维护,电脑...

win10系统搜索不到无线网络怎么办_网站服务器运行维护win10系统搜索不到无线网络的解决方法&#xff1a;1、首先按【winr】组合键打开运行窗口&#xff0c;输入service.msc&#xff0c;点击【确定】&#xff1b;2、然后开启【wired autoconfig】与【wlan autoconfig】服务即可。…

Google 联合一些社交网站来对抗 facebook

谷歌(Google) 将与其它一些行业领先的社交网站联手&#xff0c;共同对抗互联网新贵Facebook。  谷歌将于周四推出一个通用标准集 ( OpenSocial )&#xff0c;允许软件开发者为谷歌旗下社交网站Orkut&#xff0c;以及LinkedIn、hi5、Friendster、Plaxo和Ning等其它社交网站开…

域名注册便宜_有哪些便宜的域名可以注册建站?

建网站肯定不能缺少域名&#xff0c;不然别人怎么访问网站&#xff1f;总不能让用户输入一长串的网站服务器IP地址吧&#xff1f;开发网站之前需要把域名申请注册好&#xff0c;方便到时候网站快速上线&#xff0c;立马就能解析域名跟服务器绑定。也有很多人是独立建站&#xf…