软件定制 成功研发:ERP系统,OA系统,CRM系统,进销存,外贸进销存销售系统,项目管理系统 

 
 

首   页  |  成功案例  |  关于我们  |  软件产品  |  软件定制  |  编程知识  |  行业知识  |  WEB开发  |  联系我们

 
     
生成静态页,为什么不生成压缩静态页  
 

  <p>&nbsp;&nbsp;iis6开启gzip后,是先将需要压缩的静态文件压缩保存在一个目录,请求来时先判断是否支持gzip,不支持直接发送静态文件,支持则再判断文件是否修改,没有就直接发送压缩的文件,有则重新生成压缩文件。<br/>
<br/>
  根据我对公司的多个网站观察访问者浏览器支持gzip的高达99%以上,我就想又何必多保存一份静态文件,直接保存压缩后的文件不就ok,既节约了空间又节约了处理的过程,万一碰见那1%不到的访客,解个压给他便是。好!就这么处理,为压缩的html专门取个后缀名.ghtml。<br/>
<br/>
  生成ghtml:<br/>
<br/>
  首先iis注册.ghtml文件交给.net处理。<br/>
<br/>
  然后将需要生成ghtml的aspx文件通过这个函数处理,也就是生成静态文件,再多一步压缩<br/>
<br/>
/**/////<summary><br/>
///在html目录下生成压缩html<br/>
///</summary><br/>
///<paramname&quot;aspxPath&quot;>动态页面请求路径</param><br/>
///<paramname&quot;urlPath&quot;>静态页面请求路径</param><br/>
publicstaticvoidAspxToHtml(stringaspxPath,stringurlPath)<br/>
{<br/>
stringfilePathHttpContext.Current.Server.MapPath(urlPath);<br/>
if(!Directy.Exists(filePath))<br/>
{<br/>
Directy.CreateDirecty(filePath.Substring(0,filePath.LastIndexOf(&quot;\\\\&quot;)));<br/>
}<br/>
using(FileStreamfsnewFileStream(filePath,FileMode.Create))<br/>
{<br/>
using(GZipStreamgznewGZipStream(fs,CompressionMode.Compress))<br/>
{<br/>
using(StreamWriterswnewStreamWriter(gz,Encoding.UTF8))<br/>
{<br/>
HttpContext.Current.Server.Execute(aspxPath,sw,false);<br/>
sw.Flush();<br/>
}<br/>
}<br/>
}<br/>
}<br/>
<br/>
<br/>
  处理ghtml请求,浏览器支持gzip就直接写入文件,否则先解压内容再输出:<br/>
<br/>
  自己写个HttpModule,在BeginRequest事件中处理.ghtml请求,静态页嘛就模拟一下html的304处理<br/>
<br/>
publicclassFreeModule:IHttpModule<br/>
{<br/>
//Init方法仅用于给期望的事件注册方法<br/>
publicvoidInit(HttpApplicationcontext)<br/>
{<br/>
context.BeginRequest+newEventHler(context_BeginRequest);<br/>
}<br/>
<br/>
<br/>
privatevoidSetClientCaching(HttpResponseresponse,DateTimelastModified)<br/>
{<br/>
response.Cache.SetETag(lastModified.Ticks.ToString());<br/>
response.Cache.SetLastModified(lastModified);<br/>
response.Cache.SetCacheability(HttpCacheability.Public);<br/>
}<br/>
<br/>
<br/>
//处理BeginRequest事件的实际代码<br/>
voidcontext_BeginRequest(objectsender,EventArgse)<br/>
{<br/>
HttpApplicationapplication(HttpApplication)sender;<br/>
HttpContextcontextapplication.Context;<br/>
HttpRequestrequestcontext.Request;<br/>
HttpResponseresponsecontext.Response;<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
stringpathcontext.Request.Path.ToLower();<br/>
<br/>
stringacceptEncodingrequest.Headers[&quot;Accept-Encoding&quot;];<br/>
<br/>
<br/>
boolaccept!string.IsNullOrEmpty(acceptEncoding)?acceptEncoding.ToLower().Contains(&quot;gzip&quot;):false;<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
if(path.Contains(&quot;.ghtml&quot;))<br/>
{<br/>
stringfilePathrequest.PhysicalApplicationPath+&quot;/html&quot;+path;<br/>
if(!File.Exists(filePath))<br/>
{thrownewFileNotFoundException(&quot;找不到文件ghtml&quot;);}<br/>
<br/>
DateTimewriteTimeFile.GetLastWriteTimeUtc(filePath);<br/>
DateTimesince;<br/>
if(DateTime.TryParse(request.Headers[&quot;IfModifiedSince&quot;],outsince)&amp;&amp;writeTimesince.ToUniversalTime())<br/>
{<br/>
response.StatusCode304;<br/>
response.StatusDescription&quot;NotModified&quot;;<br/>
}<br/>
else<br/>
<br/>
{<br/>
<br/>
if(accept)<br/>
{<br/>
<br/>
<br/>
response.AppendHeader(&quot;Content-Encoding&quot;,&quot;gzip&quot;);<br/>
<br/>
<br/>
response.TransmitFile(filePath);<br/>
<br/>
}<br/>
<br/>
else<br/>
<br/>
{<br/>
<br/>
response.Write(DezipText(filePath));//解压ghtml文件<br/>
<br/>
<br/>
}<br/>
<br/>
<br/>
<br/>
SetClientCaching(response,writeTime);<br/>
response.End();<br/>
}<br/>
}<br/>
}<br/>
publicvoidDispose()<br/>
{<br/>
}<br/>
}<br/>
<br/>
  解压ghtml:<br/>
<br/>
  最后还有个解压ghtml函数<br/>
<br/>
/**////<summary><br/>
///解压text文件后返回str<br/>
///</summary><br/>
///<paramname&quot;textPath&quot;>物理路径</param><br/>
///<returns>文件字符串</returns><br/>
publicstaticstringDezipText(stringtextPath)<br/>
{<br/>
using(FileStreamfsFile.OpenRead(textPath))<br/>
{<br/>
GZipStreamgznewGZipStream(fs,CompressionMode.Decompress);<br/>
StreamReadersrnewStreamReader(gz);<br/>
returnsr.ReadToEnd();<br/>
}<br/>
}</p>



 

知识库

 








首 页 | 成功案例 | 关于我们 | 软件产品 | 软件定制 | 代理合作 | 售后服务 | 在线演示 | 联系我们

业务QQ:在线客服  技术QQ:在线技术支持 MSN:
Copyright (C) 深圳市凯路网络技术有限公司
粤ICP[07018848]号
软件知识 行业最新信息 编程技巧等尽在这里