使用定时器定时生成静态页

来源:互联网 发布:软件五子棋 编辑:程序博客网 时间:2024/05/26 12:59

前面两篇文章讨论的是如何生成静态页,谈了常用的两种方法, 即:模板替换法与ASPX页面输出到静态文件。

下面要谈的问题是何时生成静态页?依我的个人经验,我是这样认为的:

模板替换法:主要适用于最终页的静态页生成,如产品展示页,新闻显示页,职位描述及个人简历显示等。它们的特点是,一经生成,基本不变的内容。我建议在添加与编辑这些内容时,就生成静态页比较合适。对于其它情况,我建议看下面内容。

ASPX页直接输出到静态页:主要适合于内容经常会变的页,由于访问量大,实时性要高,需要经常生成。这时我们直接将ASPX页输出到静态页就比较方便,编程与生成静态面互不干饶,用户访问的一直是静态页,效率也非常高。那么什么时候生成比较合适?大家都比较关心。我看有人使用这种办法,就是用户在访问到ASPX页时,加一个判断,如果静态页存在,并且时间不长(如小于5分钟)。让其转向静态页,否则生成静态页。这样做,服务器还是要做很多工作,效率不高。

     我建议,用户在访问时及网上的超连接,直接使用静态页。我们用定时程序来控制生成静态页,也就是在我们站点内启动一个时钟,让其定时执行生成静态页。效率比较高些。当然也会存在一个问题。就是在用户不访问时,定时程序仍然会运行,占用服务器时间,但是,我认为这种开销非常少。另外,我们是来解决访问量大,实时性高的大中型网站。我认为这点问题在这个目标下不能算是问题了。代码如下,供大家参考:

view plaincopy to clipboardprint?
public class ConfigHtml   
  
{   
  
    public static System.Timers.Timer htmlTimer = new System.Timers.Timer(60000);   
  
  
  
    /// <summary>   
  
    /// 应用程序根目录(物理根目录 如:e:/web/)   
  
    /// </summary>   
  
    public static string RootPath = null;   
  
    /// <summary>   
  
    /// 应用程序URL根目录(如:http://www.abc.com/)   
  
    /// </summary>   
  
    public static string RootUrl = null;   
  
  
  
    private static int GenCount = 0;   
  
  
  
    static ConfigHtml()   
  
    {   
  
        //初始化应用程序根目录(物理根目录 如:e:/web/)   
  
        RootPath = Common.GetMapPath("/") ;   
  
        //初始化应用程序URL根目录(如:http://www.abc.com/)   
  
        RootUrl = "http://" + HttpContext.Current.Request.Url.Authority + Common.AppName;   
  
  
  
        htmlTimer.AutoReset = true;   
  
        htmlTimer.Enabled = true;   
  
        htmlTimer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);   
  
        htmlTimer.Start();   
  
    }   
  
  
  
    private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)   
  
    {   
  
        //生成测试静态文件   
  
        string fileName = null;   
  
  
  
        //例:如果5分钟生成一次静态文件,则使用如下代码   
  
        if (GenCount % 5 == 0)   
  
        {   
  
            fileName = RootPath + "index.htm";   
  
  
  
            CreateStaticHtml(RootUrl + "index.aspx", fileName);   
  
        }  
 
 
 
        #region 设置时钟发生次数   
  
  
  
        //设置发生次数,每触发一次GenCount加1,当GenCount大于100时,归零。   
  
        if (GenCount > 100)   
  
            GenCount = 0;   
  
        else  
  
            GenCount++;  
 
 
 
        #endregion   
  
    }   
  
  
  
    /// <summary>   
  
    /// 生成静态文件方法,外部可调用   
  
    /// </summary>   
  
    /// <param name="url">动态文件的URL路径: http://www.aa.com/index.aspx</param>   
  
    /// <param name="toFile">html文件的物理路径:f:/web/index.htm</param>   
  
    public static void CreateStaticHtml(string url, string toFile)   
  
    {   
  
        StreamReader sr;   
  
        StreamWriter sw;   
  
        WebRequest HttpWebRequest1 = WebRequest.Create(url);   
  
        WebResponse HttpWebResponse1 = HttpWebRequest1.GetResponse();   
  
        sr = new StreamReader(HttpWebResponse1.GetResponseStream(), System.Text.Encoding.UTF8);   
  
        string strHtml = sr.ReadToEnd();   
  
        sw = File.CreateText(toFile);   
  
        sw.WriteLine(strHtml);   
  
        sw.Close();   
  
    }   
  
}  

 

原创粉丝点击