高效的PHP静态文件生成思路,求指点

longxuu 2012-04-26 10:43:55
当我们在创作一个产品的时候,我们对用户去如何排列标签来构建模板是不可预期的,可能这样,可能那样,单纯的生成编译文件然后使用ob_start缓冲输出实在不属于一种明智的做法,在我看来,存在以下俩个弊端:
1、将整个网页缓冲输出意味着要进行整个网页的内容输出存储
2、每个页面的数据库查询都会浪费资源,尽管数据库有缓存(虚拟主机环境呢,缓存可不够)
3、为了内容保险,每次只能生成一个页面(欧阳在做人才网就是这样做的)

既然存在弊端,那么缓冲输出未必是一个好的办法,也许上面的方法可能是最省事的。。。但是对于产品来说,显然是大大的麻烦,最大的原因,就是使用者的水平不可预期,如果生成过慢,我想,使用者可能会投奔他处,这个时候,一个急速生成静态网页的方法就显得尤为重要了。

一个网页的内容页,除外一篇文章的标题、文章内容与其它的网页不同以外,其余全部都是相同的,这个时候,替换就出现在我的脑中,为什么我不将除外这些auto内容以外的东西将静态化呢。然后只是对auto内容进行一个替换即可,这样每次生成内容数据库连接次数和查询次数都可以最小化,我设置可以将这次要生成的一百条数据的数据先全部读取出来。

从模板到最终,我设定四层缓存:
第一层:将所有的标签循环解析出来的编译文件根据循环单独保存
第二层:将原来的标签循环替换为<cache>识别码</cache>后保存
第三层:将单独的编译全部都生成一遍实际的静态内容(不包括随页面而动的编译部分)
第四层:将非auto内容直接用静态内容替换掉,使之保存为最大化编译状态

当使用者生成静态的时候,根据cache识别码获取到编译内容生成静态内容直接替换,这样静态文件就可以生成了
当使用者使用动态模式的时候,直接读取最大化编译状态,然后将auto编译替换进去显示即可

这里问题来了,缓存更新问题,所以我又想了一下,可不可以cache保存到一个文件里面,不要第四层了,展示内容就像堆积木一样,更新缓存只要把那块删除就可以或者替换新的内容进去,以实现局部更新或全部更新

求教
...全文
92 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-04-27
  • 打赏
  • 举报
回复
瓶颈主要在数据库,怎么横向扩展数据库是关键,缓存数据是基本,缓存页面还是一个小众手段,应用场景有限。
longxuu 2012-04-27
  • 打赏
  • 举报
回复
多多探讨
longxuu 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

既然有这多缺点。为什么还要生成静态html。
可以用动态的,写伪静态规则。然后通过负载均衡之类,或者添加缓存memcache之类的来解决访问量的问题。
[/Quote]
在中国,绝大部分产品使用者似乎都爱生成静态。而且作为一个产品,什么负载均衡之类的,99%的使用者似乎都不会去购买或部署吧
coder 2012-04-26
  • 打赏
  • 举报
回复
既然有这多缺点。为什么还要生成静态html。
可以用动态的,写伪静态规则。然后通过负载均衡之类,或者添加缓存memcache之类的来解决访问量的问题。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧