现在的位置: 首页 > 综合 > 正文

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

2013年08月18日 ⁄ 综合 ⁄ 共 2120字 ⁄ 字号 评论关闭

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

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

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

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

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

    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();

        }

    }
注:Common为我定义的常用方法类。

百思特网络 www.bestwl.com

抱歉!评论已关闭.