web页面静态化方案

来源:互联网 发布:淘宝多少钱可以分期购 编辑:程序博客网 时间:2024/05/29 16:10

一、需求背景

为了让访客更快速的访问系统的相关信息,达到信息即点既显示的效果,遂决定针对系统的部分页面进行静态化!

二、技术方案

鉴于上述需求背景,经讨论采用页面静态化方案,即将频繁请求的页面做成静态的html页面,在客户访问的时候,直接跳转到静态的html来提高访问效率。

三、静态化的技术原理

一般的模式是:客户端请求→服务器响应→反馈给浏览器解析呈现内容给客户浏览器。

为了方便大批量页面的静态化处理并且要求尽少量的改动代码,所以我们的方案是截取客户第一次访问服务器后响应内容,产生静态文件并存放起来,当下一个客户再次请求相关内容时 ,判断客户请求是否已经产生了静态页面,如果是,则直接返回静态页面,如果没有,则服务端响应请求并产生静态页面。流程图如下:

四、技术实现

1).配置需要静态化的页面

解释:将需要静态化的页面配置在配置文件中,方便统一管理静态化的需求信息。
配置文件:staticize.properties
配置规则:
Key:/命名空间/action名称/执行的方法名称
Value: 执行的方法所返回的字符串
Eg:/app/ebBookHome/ebBookHome=success;

2).staticizInterceptor进行全局拦截

2.1.判断当前访问用户是否已经登录,因为静态化目前只针对非登录用户

2.2.判断在属性配置文件中(staticize.properties)是否配置了当前请求的路径是否需要静态化

2.3.根据规则获得存放相应静态文件的目录

目录规则:语言环境/命名空间/ action名称/执行的方法名称/以跳转的目标jsp的文件,名称为“名称/”。

2.4.根据规则获得静态文件的名称

名称规则:

若请求路径没有参数,则以跳转的目标jsp的不带格式的名称为名称,Eg:若请求路径 http://ebook.ruanko.com/app/ebBookHome!ebBookHome.action,可以看出此链接没有带参数,从配置信息中发现跳转的目标jsp为home.jsp,则静态文件名称为home.html。

若请求路径带参数,则根据如下规则产生名称,参数名称1=参数值1&参数名称2=参数值2&参数名称3=参数值3……依此类推。

Eg:若请求路径是http://ebook.ruanko.com/app/ebookAction!booksList.action?ebCode.id=19b0f690e0b0413f8c047f9731ce25c9&pageModel.page=1,可以看出此链接有参数,根据规则,则静态文件名称为:ebCode.id=19b0f690e0b0413f8c047f9731ce25c9&pageModel.page=1.html

2.5 判断目录中是否存在静态文件

若存在,则跳转到对应的静态文件,若不存在,这执行默认的action方法,并生成静态文件。

3).WrapperResponse对response的封装,用来获得服务器响应内容,并将内容写到静态文件。

技术实现对应的流程图如下:

五、静态化效果

当某一路径第一次请求时,服务器会与数据库交互,需要消耗一定的时间,当此路径被请求一次之后,所有此路径的请求将直接跳转到静态页面,速度明显提升。

六、适用场景

对于不常更新,交互很少的页面可以采用此静态化方案。若需要保证数据相对的及时性,可以定时产生静态页面,比如每一个小时产生一次。

七、更新策略

现阶段采用的是:每天晚上23点59分0秒将所有的静态页面全部删除,待下次访问时全部重新生成。

预留方案:为了更加及时显示更新信息,在页面相关内容更新时,可以采用aop技术将所有的更新方法进行切面拦截,将符合要求(因为没必要在所有的更新操作之后都进行静态文件的更新,所以我们可以在通知中进行更新方法的筛选,满足要求的更新操作才进行通知操作)的更新操作方法发出删除静态页面的通知。

原创粉丝点击