当我们在创作一个产品的时候,我们对用户去如何排列标签来构建模板是不可预期的,可能这样,可能那样,单纯的生成编译文件然后使用ob_start缓冲输出实在不属于一种明智的做法,在我看来,存在以下俩个弊端:
 1、将整个网页缓冲输出意味着要进行整个网页的内容输出存储
 2、每个页面的数据库查询都会浪费资源,尽管数据库有缓存(虚拟主机环境呢,缓存可不够)
 3、为了内容保险,每次只能生成一个页面(欧阳在做人才网就是这样做的)
 
既然存在弊端,那么缓冲输出未必是一个好的办法,也许上面的方法可能是最省事的但是对于产品来说,显然是大大的麻烦,最大的原因,就是使用者的水平不可预期,如果生成过慢,我想,使用者可能会投奔他处,这个时候,一个急速生成静态网页的方法就显得尤为重要了。
 
一个网页的内容页,除外一篇文章的标题、文章内容与其它的网页不同以外,其余全部都是相同的,这个时候,替换就出现在我的脑中,为什么我不将除外这些auto内容以外的东西将静态化呢。然后只是对auto内容进行一个替换即可,这样每次生成内容数据库连接次数和查询次数都可以最小化,我设置可以将这次要生成的一百条数据的数据先全部读取出来。
 
从模板到最终,我设定四层缓存:
 第一层:将所有的标签循环解析出来的编译文件根据循环单独保存
 第二层:将原来的标签循环替换为<cache>识别码</cache>后保存
 第三层:将单独的编译全部都生成一遍实际的静态内容(不包括随页面而动的编译部分)
 第四层:将非auto内容直接用静态内容替换掉,使之保存为最大化编译状态
 
当使用者生成静态的时候,根据cache识别码获取到编译内容生成静态内容直接替换,这样静态文件就可以生成了
 当使用者使用动态模式的时候,直接读取最大化编译状态,然后将auto编译替换进去显示即可
 
这里问题来了,缓存更新问题,所以我又想了一下,可不可以cache保存到一个文件里面,不要第四层了,展示内容就像堆积木一样,更新缓存只要把那块删除就可以或者替换新的内容进去,以实现局部更新或全部更新
 
求教