最近看了下DZ cache.func.php里的内容,有了那么点了解
首先说说这里面各个函数的作用,updatecache()不多说了,主函数的作用,核心功能的实现,这个函数首先定义了所有一个包括缓存名称的数组,然后根据传入的参数名,更新数据库cache表中的缓存数据进行更新(其中用到了getcachearray()函数,后面讲解)接着,根据不同$cachename查询cache表并生成缓存文件,后面的可能有点费解了,还是根据$cachename查询数据库,但并不是cache表,并生成缓存文件,个人认为这是为了函数的可用性,在论坛程序的运行过程中可能碰到只需更新部分缓存的情况,这是时候,其中的if语句就起作用了。
updatesettings()函数,一个独立的函数,只是更新settings缓存。
writetocache()函数,这个函数是完成生成缓存文件的主要函数,他根据传入的脚本名称,缓存名称,缓存前缀和最重要的缓存数据来生成文件并写入。
writetocsscache()函数,不多说了,生成css文件缓存的函数。
getcachearray()函数,这个函数就像前面说的,他的主要作用是根据传入的$cachename查询特定的数据表,取出数据并且进行数据的处理,生成一定的格式,并将信息更紧进cache表中。保证updatecache()函数中查询cache表时取得的是最新的数据。此函数由一千多行,其实中间主要包括了两个switch()语法,第一个是根据$cachename来生成要查询的数据表字段和条件,第二个是根据$cachename来对查询到的数据分别做处理。所以真正运行起来,并不是运行太多的代码,速度是很快的。
getcachevars()函数,将数组中的值转换成可以作为数据写入文件的信息,数组键作为变量名,键值为变量值。
advertisement()与广告缓存的处理有关,因为还用不到,所以没研究。
arrayeval()函数,与array_eval函数作用相同,只是进行了强化。
parsehighlight()函数,对所取得的数据中需要高亮显示的部分进行处理。比如论坛名称啊,什么的,需要高亮显示,就用这个函数来进行处理。
其他函数暂时没有研究。
这里面最让我费解的是getcachearray()函数中进行第二个switch语句里进行数据处理的部分,我最近也在做一个缓存更新系统,参考了DZ的代码,但是我觉得进行很简单的处理就可以保证安全和数据正确,可以满足要求,不知道DZ进行这么复杂的处理由什么作用,我怀疑是不是跟论坛程序中其他的代码进行了耦合以使缓存文件起到更大的作用。
欢迎讨论,期待达人指教!!!

解决方案 »

  1.   

    这位仁兄,好像一直在发类似的帖子研究discuz更新缓存的过程。
      

  2.   

    基本上我不会太深入去看别人的代码
    了解对方实现原理就可以了
    适合别人的不一定适合
    强行模仿最终只会变成四不象p.s. 别人的东西不一定是好的 a_a
      

  3.   

    哦,说惯了,就是DISCUZ!论坛程序
      

  4.   

    呵呵,好像phpchina中,涉及讨论discuz的帖子比较多。
      

  5.   

    兄弟研究得很透吗^^不过我很怀疑discuz官网上已经有这些函数的介绍了