网站静态化方案--首次访问静态化

服务器压力过大?一个有效的办法是将内容静态化.静态页面的访问速度比起动态页面那是绝对的优势.

目前网站静态化的方案(不谈技术)根据总结主要有三种:

实时的静态化,即增删改后立即生成对应的静态文件

定时静态化或者手工静态化,即增删改后有程序控制在预定的时间内进行一次静态化批量生成,或者手工批量生成

以上两种方法是大部分网站都经常使用的方法,但是他们有一个共同的缺点就是,生成了大量的不受关注的页面,占用服务器磁盘空间.

那么有什么好的方法来解决上面的问题么?答案是肯定的

看看下面这个流程图(画的不好,多包涵)

充分利用了服务器404错误页面可以自己指定的优势,来完成首次访问的静态化.
结合数据库,减少IO的操作次数,保证所生成的页面绝对是用户访问过的页面,
甚至可以对以下的方案进行扩充,根据页面的受关注程度,定期可以删除一些受关注程度较低的页面,进而节约磁盘空间,特别是购买别人空间的朋友尤其有用!

我根据以上的思想做了一个简单的demo
使用的是aspx
在webconfig中配置 如下:(也可以通过IIS)
<customErrors mode="On" defaultRedirect="Loginc.aspx">
Loginc的代码如下:

 protected void Page_Load(object sender, EventArgs e)
        
{
            
string url = SyRequest.GetQueryString("aspxerrorpath");
            url 
= url.Substring(1, url.LastIndexOf(".")-1);
            
if (url.IndexOf("_"> -1)
            
{
                
string page = url.Split('_')[0];
                
int toid =Utils.StrToInt(url.Split('_')[1],-1);
                
switch (page)
                
{
                    
case "hospital":
                        Response.Redirect(
"hospital.aspx?id=" + toid);
                        
break;
                }

            }


        }
Hospital.aspx页面代码:
 protected override void Render(HtmlTextWriter writer)
        
{
            
string StaticFileName = "hospital_"+SyRequest.GetQueryInt("id"-1)+".html";
            StreamWriter r 
= new StreamWriter(Server.MapPath(StaticFileName),
                  
false, System.Text.Encoding.UTF8);  //StaticFileName是html文件名
            HtmlTextWriter h = new HtmlTextWriter(r);
            
base.Render(h);
            r.Close();
            h.Close();
            Response.Redirect(StaticFileName);
        }
以上就是一个大致的过程,希望大家可以提出不同的见解,mygtalk:suyuan19@gmail.com
同时有一个问题就是:当很多人同时访问同一个未生成的页面时,会出现什么情况呢?具体的我还没有测试
posted @ 2008-04-02 12:03  雨中漫步的太阳  阅读(3005)  评论(1编辑  收藏  举报