V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
richiefans
V2EX  ›  PHP

资讯类CMS程序生成HTML方式的利与弊?

  •  
  •   richiefans · 2013-11-16 06:04:05 +08:00 · 5816 次点击
    这是一个创建于 4024 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一直在做资讯类的站点,php此类开源程序比较多,我们在用的也是在一个开源cms程序上二次开发的
    最开始 选用的方式 就是生成HTML的方式
    那么有很多站长也非常喜欢这种“原生”静态化的方式,到现在遇到越来越多的麻烦
    在内容量越来越大的情况下出现如下问题

    弊端:

    1.更新HTML不及时
    -发布内容后 所属列表-》频道 都需要生成HTML (后台有设置 可以自动触发生成)
    2.更新速度慢
    -100万文章生成后的静态页面文件大小就要几十个GB,如果遇到改版之类的事情,可能全站要生成,消耗的时间可能要以“天”为单位,(局部信息用了SSI 如果不是大改版 像页面右侧等位置得更新是没有问题的)

    优势:
    1.通过生成静态页后 进行部署 在大访问量情况下 消耗较低
    2.后端php、DB性能不会对前端进行影响

    总之目前来看 更喜欢的动态机制 前端加cache的方式,灵活性更大
    目前开源程序主要的方式还是通过页面触发生成html,在考虑改成php-cli的方式放到后端来执行 不知道是否能够提升效率

    也希望大家能够给出点“点子”,看看如何维护这样的站点比较好
    18 条回复    1970-01-01 08:00:00 +08:00
    lhx2008
        1
    lhx2008  
       2013-11-16 08:51:30 +08:00
    我觉得是给那些性能渣的空间用的,vps以上完全没必要
    richiefans
        2
    richiefans  
    OP
       2013-11-16 09:55:32 +08:00
    @lhx2008 也不完全是吧 我看到不少大点的站也应该是生成HTML的 都是用独服的
    fen
        3
    fen  
       2013-11-16 11:18:35 +08:00
    有些网站是用伪装成生成 html
    family
        4
    family  
       2013-11-16 11:36:36 +08:00 via iPhone
    html做交互体验极差 用动态做缓存不就好啦
    richiefans
        5
    richiefans  
    OP
       2013-11-16 12:20:03 +08:00
    @family 对于已有项目的迁移成本比较高,主要还是从seo来考虑 已经有上百万的静态页地址被收录

    做rewrite的话 不知道要做多少了
    lhx2008
        6
    lhx2008  
       2013-11-16 12:28:17 +08:00
    @richiefans cms有提供相关的解决方案的吧,没有就好麻烦,不过rewrite也不会很多,nginx下面的话
    Ricepig
        7
    Ricepig  
       2013-11-16 12:39:23 +08:00 via iPhone   ❤️ 1
    可以选择有访问的时候生成静态阿
    akira
        8
    akira  
       2013-11-16 13:44:00 +08:00
    首页 热门页面静态,其他动态。
    kstsca
        9
    kstsca  
       2013-11-16 14:03:39 +08:00   ❤️ 1
    我还是喜欢分发式的静态页面 一个母机 多台子机机构部署。

    关于全站生成不赞成,参考新浪 网易,根本就不管的
    shiny
        10
    shiny  
       2013-11-16 14:17:26 +08:00
    一开始小站可以用全站静态,到后期可以用伪静态,源是动态,CDN 是静态。
    msg7086
        11
    msg7086  
       2013-11-16 14:29:40 +08:00
    一百万文章如果塞进wp的话服务器早就挂了
    046569
        12
    046569  
       2013-11-16 17:03:50 +08:00   ❤️ 1
    LZ没有说"大访问量"是多大,另外也不知道具体的网站程序,基本只能靠猜了.
    我觉得若不是因为安全原因,没有必要生成静态页了,PHP的效率不错了.更多的时候,你要找出瓶颈,到底哪最慢?哪慢哪开缓存嘛~不能光靠猜,要靠数据去验证.
    迁移的问题,除了rewrite以外,也可以考虑引入router系统.更多的成本还是在开发上,二次开发有时候并不省力.
    richiefans
        13
    richiefans  
    OP
       2013-11-16 17:46:38 +08:00
    @045569
    目前的量大概是 日均100万uv 300wpv左右

    现在静态的目录结构 大概是/父目录/子目录/子目录/.../文章id.html

    现在在想如果要做rewrite的话 只能是判断末位/([0-9])+.html$ rewrite到news.php来处理

    然后前端生成的url地址可以保持不变 这样基本可以保证现在的url不变


    用的是phpcms2008二次开发的
    richiefans
        14
    richiefans  
    OP
       2013-11-16 17:48:27 +08:00
    目前采用的方式 是后端服务器主要给编辑用 然后用sersync来进行同步到前端,前端nginx基本只负责静态页的处理,现在遇到的问题就是生成速度过慢
    @Ricepig 的建议倒是挺好的,可以放一个请求来判断该页面是否过期 过期的话就再次生成

    谢谢大家的思路 很有启发
    lusin
        15
    lusin  
       2013-11-16 18:51:25 +08:00
    厉害

    请问100万uv,300万pv alexa排名能到多少呢?
    danial
        16
    danial  
       2013-11-16 19:41:28 +08:00
    可以考虑用简单PHP代码加载可重用的内容HTML部件。生成的HTML是内容部分,分块的,页面中简单PHP夹在这些HTML内容。应该会快些,更新模版设置的时候,生成部分没有那么大。
    alex321
        17
    alex321  
       2013-12-05 10:47:20 +08:00
    我们有个站点的流量类似。目前采用的是全站静态化发布 + cdn 的方式。但遇到一个问题,就是每逢改变模板就需要重新大批量发布,发布性能低下。
    按照我的计划,将来可能会逐步采用 lvs 轮询 + 代理服务器 + 缓存服务器和应用与数据服务器 + cdn 的形式。需要大批量更新模板时,计划切换到动态模式优先相应新模板,同时后端热备的应用于数据服务器开启批量发布任务,全部发布完成后热备切换上线。
    里面涉及到的动态内容,比如点击量、评论内容的处理都采用异步。
    richiefans
        18
    richiefans  
    OP
       2013-12-06 13:52:20 +08:00
    @alex321 目前和我的情况类似

    目前还没有尝试过多改造工作,依然是后端+前端+cdn,一些动态的部分是ajax,一些全站经常变的东西是通过ssi来实现

    后端主要是库操作+createhtml 然后rsync到前端

    有一个想法是启用一个更新机制 可以在批量更新模板时打开,由用户触发放到消息队列里么,然后跑一个程序来更新消息队列里面需要更新的文件

    平时是关掉这个请求的

    这样对于没有访问的老模板就先不更新

    大家可以多沟通交换下思路
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3002 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 00:36 · PVG 08:36 · LAX 16:36 · JFK 19:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.