none
MVP级的高手请进,关于整站静态页的一些问题和疑惑 RRS feed

  • 问题

  • 各位好,对于大型门户网站,整站静态页的方式,目前总结下来,有几下几种办法,但各种方法都有期不完美的地方,所以深感疑惑,对于新浪、网易这种大型的门户网站,他们的静态页生成机制究竟是用的哪一种呢?如果以下几种都不是的情况下,那他们采用的是哪一种机制呢??

    1.整站模板+样式,然后通过WEB IIS去读取数据库,通过这些模板和样式动态生成HTML文件并保存于服务器。
    弊端:
    如果在新闻量很大的情况下,模板有更改,那么岂不是要重新发布一次所有的页面?这样岂不是大量浪费时间和服务器资源?
    而且,如果是BBS或者评论这种更新速度比较快的东西,那么这些页面怎么办?

    2.各新闻保存时自动生成。
    弊端:
    在保存文件时生成文件,解决了一次发布大量信息时的服务器资源浪费问题。且如果内容有更改,页面会及时得以更新,但如果在内容没有更改,只是模板文件有更改的情况下怎么办呢?


    而且,以上两种方法都有一个问题,就是局部动态的问题。如果模板中局部信息是动态的,更新速度比较快的,比如BBS的最新帖子。那么这部分这么解决,现在我们采用的方法是用JS动态加载,但用JS动态加载的话对搜索引擎的支持就会非常差了。如果不用JS动态加载,那么只能采用IFRAME的方式来解决?

    3.在WEB.CONFIG中配置节点,自定义类去接收所有的HTTP访问请求,每请求一个HTML时,如此HTML不存在,则去判断是HTML是否能映射到某个动态文件(根据某个映射配置文件查找),如果能映射到某个动态文件,那么,立即生成此HTML文件,并呈现给用户。
    弊端:
    此种方法,如果模板或内容有更新怎么办?目前我们采取的方法是:每请求一个HTML,如果此HTML存在,则根据配置文件判断内容是否已过期(一般为5分钟),如果已过期,则重新生成此HTML并呈现给用户。这样一来,很好的解决了更新的问题,只不过在更新后会有5分钟的间隔时间。
    但又有一个问题出现了,如果自定义类去接收所有的HTTP访问请求,那么每个用户的各种请求都会接收到(包括CSS文件),虽然可以根据扩展名来判断,非HTML不去做其余的逻辑操作,但:这样是否会造成服务器资源的浪费?是否会极大的损耗服务器的性能?

    综上所述,目前完全没有一种完美的办法来解决HTML的问题,请问各位同仁,像新浪、网易这种站点是如何解决此问题的?谢谢!


    tellov
    2009年4月15日 7:13

答案

  • 静态化的方法有几种:
    1,ssi服务器端包含,shtml之类的就是
    2,UrlRewrite,假静态,实际还是程序处理的
    3,完全静态化,模板改变,机器处理还是比较快的,大型网站的服务器会很多,google的服务器可能几十万台甚至百万台

    所以,大型网站一般很少改版,如新浪
    http://news.sina.com.cn/china/2000-4-12/81186.html
    http://news.sina.com.cn/c/2003-04-13/2306993691.html
    孟宪会
    2009年4月15日 9:46
    版主
  • 三种都很有可行性

    最终的目的  是  行为/样式/数据  三种静态化的分离与组合




    我看你提出的3种方案   仅仅讨论了组合的流程    但是组合的结果还是没有变化。

    这里我推荐一种做法

    一篇新闻稿 
    显示模板采用静态html 文件静态化     (模板)
    不常更新的数据采用xml静态化   (数据)
    经常更新的数据采用 js或者ajax 动态化   (行为)

    分离成这样三步分    在客户端用 javascript 来组合


    工作突然有点忙 嘿嘿
    2009年4月17日 4:54

全部回复

  • 我自己顶一下,别把我的帖子弄沉了。
    tellov
    2009年4月15日 8:55
  • 静态化的方法有几种:
    1,ssi服务器端包含,shtml之类的就是
    2,UrlRewrite,假静态,实际还是程序处理的
    3,完全静态化,模板改变,机器处理还是比较快的,大型网站的服务器会很多,google的服务器可能几十万台甚至百万台

    所以,大型网站一般很少改版,如新浪
    http://news.sina.com.cn/china/2000-4-12/81186.html
    http://news.sina.com.cn/c/2003-04-13/2306993691.html
    孟宪会
    2009年4月15日 9:46
    版主
  • 静态化的方法有几种:
    1,ssi服务器端包含,shtml之类的就是
    2,UrlRewrite,假静态,实际还是程序处理的
    3,完全静态化,模板改变,机器处理还是比较快的,大型网站的服务器会很多,google的服务器可能几十万台甚至百万台

    所以,大型网站一般很少改版,如新浪
    http://news.sina.com.cn/china/2000-4-12/81186.html
    http://news.sina.com.cn/c/2003-04-13/2306993691.html
    孟宪会

    谢谢孟老大的回答,那请大大型网站是用什么机制的呢?第2种?第1种?
    应该不会是用第一种,添加后用一台专用的发布服务器一次性发布吧?

    tellov
    2009年4月15日 9:59
  • 虽然没有见过他们的代码,看格式一般是ssi实现的,扩展名是shtml,历史文章可以采用完全的html
    孟宪会
    2009年4月15日 11:52
    版主
  • urlrewrite假静态,然后加上缓存
    微软认证程序开发专家:Web Developer (MCPD: Web Developer)
    2009年4月15日 12:03
  • 虽然没有见过他们的代码,看格式一般是ssi实现的,扩展名是shtml,历史文章可以采用完全的html
    孟宪会

    如果用SSI的情况下,那么不可能所有的内容都是Include进去的吧,肯定只有一些常见的可变内容是include进去的,那么,按照您的意思,是否可以得出以下定论?

    一般采用我第一帖中的第2种方法,每篇文章保存之后立即生成静态页,然后有个专门的程序去发布首页和栏目列表页等。因为模板不太可能改变,所以没有重新发布所有新闻页的需要,在新闻页中变化较化的地方,采用SSI技术(新浪)或IFrame(网易),以实现实时更新?

    谢谢!
    tellov
    2009年4月16日 1:17
  • urlrewrite假静态,然后加上缓存
    微软认证程序开发专家:Web Developer (MCPD: Web Developer)
    你这个方法还不如不做静态
    且如果用你这种方法实现静态,还不如用我主帖中的第三种方法实现。
    tellov
    2009年4月16日 1:18
  • MSDN上人气好少啊,UP一下,不然不知道沉到哪里去了。


    tellov
    2009年4月16日 16:46
  • 好东西 标记一下
    www.haodd123.com 我是半路出家,而且是自学 学的是C#语言,希望回帖的高手们留意一下,谢谢大家的帮助
    2009年4月16日 18:33
  • 还是要看实际状况的

    很多年以前  我们使用“计数器等超高频率可变内容用服务器声成js文件document.write”的方式解决
    工作突然有点忙 嘿嘿
    2009年4月17日 3:47
  • 还是要看实际状况的

    很多年以前  我们使用“计数器等超高频率可变内容用服务器声成js文件document.write”的方式解决
    工作突然有点忙 嘿嘿
    嗯,这种计数器之类的我们也是用JS解决。
    关键是整体方面。如果让您去构建一个网易,那么您采用什么办法来产生静态页呢?
    用独用的发布服务器,WIN32程序进行发布?那除此以外就没有更好的办法了吗?我觉得我主帖中的第3种办法还是有一定可行性的,不知道您看如何?

    tellov
    2009年4月17日 3:51
  • 三种都很有可行性

    最终的目的  是  行为/样式/数据  三种静态化的分离与组合




    我看你提出的3种方案   仅仅讨论了组合的流程    但是组合的结果还是没有变化。

    这里我推荐一种做法

    一篇新闻稿 
    显示模板采用静态html 文件静态化     (模板)
    不常更新的数据采用xml静态化   (数据)
    经常更新的数据采用 js或者ajax 动态化   (行为)

    分离成这样三步分    在客户端用 javascript 来组合


    工作突然有点忙 嘿嘿
    2009年4月17日 4:54