基于ASP.NET的页面静态化实现方法研究

2017-07-12 08:07生力军
软件导刊 2017年6期

生力军

摘要: 针对动态页面技术缺点,基于ASP.NET框架,提出了动态页面静态化的3种不同实现方案——真静态、伪静态、折中法。其中,伪静态主要使用HttpModule拦截并修改HTTP请求中的URL地址;折中法主要使用HttpHandler结合静态页面模板生成并返回静态页面文件。给出了页面静态化实现方案选择策略,即利用参数对动态网页进行分类,不同的动态网页采用不同的静态化实现方案。

关键词:ASP.NET;静态化;HttpModule;HttpHandler;选择策略

DOIDOI:10.11907/rjdk.171136

中图分类号:TP301

文献标识码:A 文章编号:1672-7800(2017)006-0022-03

0 引言

动态网页技术因其交互性强、数据刷新实时等特点[1],使网站开发效率和维护效率得到了大幅提升,目前互联网上大部分网站都采用动态网页技术构建,但其存在的问题却不容忽视。

(1)对搜索引擎不够友好。目前,很多搜索引擎不支持动态链接,在网络上获取页面时,会优先获取HTML静态页面内容。

(2)降低服务器性能。如果页面访问量比较大,动态页面会频繁与数据库服务器进行交互,降低服务器性能。当前,在Web技术中,只有HTML的静态页面效率最高,对服务器性能要求最低[2]。

(3)暴露网站使用技术。如果动态页面含有类似.jsp或.aspx这样的扩展名,那么制作网站技术便一目了然,使黑客容易有针对性地对网站进行攻击。

针对上述问题,有必要对动态页面进行静态化处理。目前,大多数网站都采用单一的静态化实现方案,但是在某些情况下,服务器性能不但没有提高,反而出现了下降。

实际上,对于不同类型的动态页面,其静态化实现方案应该有所区别,以最大限度提高服务器性能。本文首先分析了ASP.NET框架下不同页面静态化实现方案,然后将动态页面进行分类,按照不同页面的特点采用不同的静态化实现方法。

1 实现方案

目前,实现页面静态化技术主要有以下几种方案:

(1)真静态。这种方案真正将动态页面批量转化成静态页面并存储在服务器上。这种方案的优点是空间成本较低,不需要数据库服务器。其缺点也很明显:一旦网站规模较大,页面的维护全部依靠手工操作,工作量巨大,维护困难。因此,这种方式只适合一些简单的、更新频率极低的介绍性页面。

(2)伪静态。这种方案其实并没有真正将动态页面转化为静态页面,而是通过URL重写技术,将动态页面路径重写成.html静态页面路径,主要实现搜索引擎友好性与网站安全性,而性能与单纯的动态页面没有差异。这种方案适用于更新速度快而访问量较小的动态页面。

(3)折中法。这种方案在用户访问静态页面时,首先判断静态页面在服务器上是否存在,如果存在就直接将静态页面返回给客户端;如果不存在,则执行转化操作生成静态页面,将该页面发送给客户端并保存在服务器上,下次再请求该页面时则无需执行转换操作。

以上3种方案在动态页面静态化实现中可结合使用。由于真静态实现方式与静态页面制作方式相同,本文不再赘述。下面给出ASP.NET下伪静态和折中法的实现方式。

1.1 伪静态实现方式

伪静态实现依赖对用户请求的URL地址重写。在ASP.NET框架下,可以使用框架中提供的HttpModule对HTTP请求进行拦截,对请求的地址进行验证。如果符合重写要求即将URL地址转换成动态页面形式,在服务器端对用户请求进行重定向。具体实现步骤为:①新建一个类,实现IHttpModule接口,命名为StaticModule;②在新建类中定义一个EventHandler委托类型方法,命名为context_BeginRequest;③在context_BeginRequest方法中獲取用户请求的原始URL;④对原始URL进行验证(可使用正则表达式),如果验证成功则生成真实的URL地址;⑤在服务器端将用户请求重定向到真实的URL地址;⑥重写IHttpModule接口中的Init方法,将context_BeginRequest方法绑定到请求处理之前触发的事件中;⑦在web.config配置文件中注册StaticModule。

1.2 折中法实现方式

折中法实现关键在于如何在静态页面不存在的情况下自动生成静态页面。在ASP.NET框架下,可以使用框架中提供的HttpHandler[3]对Http请求进行处理,提供关键参数,生成真实静态页面地址,判断静态页面文件是否存在。如果存在,则直接返回静态页面文件,否则就生成静态页面文件。在生成静态页面文件时,为了提高生成效率,可以提前准备好静态页面模板,运用特殊符号标签作为占位符,在生成页面时只需对占位符进行替换即可。实现步骤:①制作静态页面模板Template.html,模板中用特殊符号(如:{$xxxx})作为内容占位符;②新建一个类,实现IHttpHandler接口,命名为StaticHandler;③重写IHttpHandler接口中的ProcessRequest方法,在其中获取用户请求的URL地址,并将其转换为真实的静态页面地址;④判断上一步生成的真实静态页面是否存在,如果存在则直接将页面返回,否则读取静态页面模板Template.html,将模板中的占位符替换为真实数据,将文件另存为静态页面文件并将其返回给客户端;⑤在web.config配置文件中注册StaticHandler。

2 页面静态化实现方案选择策略

从性能角度考虑,应该优先选择真静态和折中法进行页面静态化,特性越接近静态页面的动态页面,其静态化价值越大,即读取频率越高、更新频率越低的页面越适合静态化。读写比[4]是定量参数,即进行一次静态化操作后,下一次被静态化前该网页读取的次数。网站可以根据实际需求设置读写比阈值(记为p)。当网页读写比大于p时,静态化对性能有提升,反之,盲目静态化就会增加服务器的文件读写工作量,反而影响效率。

如图1所示,对页面进行分类,其中读写比函数f(x)=px为静态化方案选择的分界线,分界线之上的Ⅱ区页面可以选择折中法,其中写频率较低的Ⅰ区页面可以考虑使用真静态法;而分界线以下的Ⅲ区页面就不适合频繁读写的静态网页文件,从搜索引擎友好性和安全性考虑,更适合使用伪静态法实现。

3 结语

本文分析了动态页面静态化实现方案,即真静态、伪静态和折中法,并给出了伪静态和折中法在ASP.NET框架下的实现。伪静态主要利用HttpModule对Http请求进行拦截,从而重定向页面地址;折中法主要利用HttpHandler生成并返回真实的静态页面文件。3种实现方案各有特点,应根据不同的动态页面选择不同的实现方案。读写比是一个可供分类网页的参数,读写比高的页面可使用折中法实现,更新频率极低的页面可考虑使用真静态法,而读写比低的页面可使用伪静态法实现。

参考文献:

[1]赵志勤,朱永虎,林玉凤.面向数据分析的Web页面静态化方法研究与实现[J].现代计算机,2014 (13):37-40.

[2]曾小燕,周统钢.基于数据集成的页面静态化方法在政务网站的应用[J].电脑知识与技术,2014,10(15):3695-3696.

[3]沈阳.基于HttpHandler的页面静态化[J].数字技术与应用,2012 (1):50-51.

[4]白万民,吴夫丹,白小军.Web应用中的网页静态化技术研究[J].西安工业大学学报,2014,34(1):34-37.

(责任编辑:杜能钢)