微构网络

Discuz频道列表和内页出现缓存CSS混乱的解决方案

2014-08-06 09:42 栏目:技术教程 查看(11,935)

       虽然BBS在没落,加上随着windphp的没落,很多人看衰DZ的前途,其实我觉得这些东西仅仅是个工具而已。比如dz做的不只是论坛,还可以是各种方式的WEB应用。
       我相信很多做DZ开发的都清楚,有的用户需求就是需要各种个性的。比如不同页面应用不同样式的头部和底部等等。而今天在实际开发过程中就遇到了一个非常诡异的问题。那就是频道列表和内页的CSS缓存输出出现混乱

       开始基本情况是这样的:首页(门户首页)应用一个独立的头部(引用路径为common/headerindex.htm),门户列表页和内页应用一个头部(引用路径为portal/list/header.htm),而论坛及其他的页面的公共头部就是引用默认的路径下的,当然是经过修改的,路径为common/header.htm。
       我相信如果是通常不使用缓存机制来说,这一切都将非常正常,而大家要知道DZ是应用了cache机制的。比如我们查看任意页面的前端源代码我们会发现css主体部分是形如data/cache/style_2_common.css?Oxl这种的,显然这不是我们开发模板的时候创建的文件,而是程序根据我们开发的模板CSS写入缓存后得到的。正常情况下,不同页面除了这个主体CSS缓存外,还会有其他的。比如门户列表页应该还有”data/cache/style_2_portal_list.css?Oxl“格式的,门户内页还有”data/cache/style_2_portal_view.css?Oxl“格式的。具体的大家可以参考官方开发文档关于CSS缓存机制,传送门→→http://faq.comsenz.com/library/template/cache/cache_css.htm

     但就是上面看似非常正常的处理方式,却得到了异常的结果:因为更新了开发模板的CSS样式,我习惯用官方指导的extend_commons.css ;然后更新后台缓存,后来发现文章内页正文部分明显有部分样式显示不出来,结果更新几次缓存后又正常了,但列表页又出现问题了。总而言之就是总是有一小块地方不正常,不能完全加载CSS。结果通过查看前端源码,发现除了主体CSS缓存文件引用外,对于当前页面的特征CSS缓存却引用混乱,比如列表页成了”data/cache/style_2_portal_view.css?Oxl”,内页反而成了“data/cache/style_2_portal_list.css?Oxl”。

     在开发者群里面问童鞋们,有好心的童鞋提示说有CSS部分重复了,我就按照别人的经验来检查了,再者我以前同样用dz开发的时候,引用不写入主体CSS的其他CSS重复引用确实会造成这样的现象。但我通过检查后却没有发现出现了CSS重复的现象,然后就是纠结了好久,再去交流,显然没人理,我想也许大家没有这么“巧合”地遇上这个问题。

     这个时候我就在考虑是不是DZ的缓存机制造成的,从而因为引用的路径或者文件名称也能导致奇葩的冲突。虽然对DZ的缓存机制有一些了解,但对于其内在的东西还是不了解,毕竟DZ实际上只是一个半开源的产品。结果我就通过各种各样的测试,发现还真可能是这样的问题引起的(之所以说可能,是因为我还没完全从原理上完整的说明,只是推理而已)。

      总之解决通过以下方式就解决了:把我新建的view_new.htm(内页文章模板文件)、list_new(列表页面文件),头部引用由开始的portal/list/header.htm改为common/headerview.htmcommon/headerlist.htm (其实这两个文件就是的portal/list/header.htm副本),这样以后就问题没有出现了。
       这里分享一下我在没办法的情况下“瞎测试”的几种失败方式:
       1、把新增的CSS全部删除,故障依然存在(排除CSS重复);
       2、把我修改的文件用默认的覆盖(除了引用头部处做修改),排除我自己开发这些文件的错误存在;
       3、把我开发的这些文件头部引用改为引用默认的头部文件发现恢复正常,而改回引用原来头部路径,但用默认头部文件覆盖那些头部文件,却错误依然发生;
       4、其实在这个过程做过很多偏SB一样的测试……..

        到了这里我的结论就是:出现这种情况可能是因为DZ的内部机制造成命名或者路径命名对其加载CSS文件造成影响,从而我们通常开发过程中“正确”的方式在这里却成为了“错误”。也许DZ官方可能把我们的这种“错误”提示过给我们开发者,但是不知道是不是我个人的原因没有看到这样的提示或者相关的文档(官方的开发文档我基本都看了个遍),由于不理解最DZ最核心的缓存作用机制,因此这里的结果也只能以“可能”下结论。

转载请注明出处:Discuz频道列表和内页出现缓存CSS混乱的解决方案 - 微构网络
分享:

您可能遇到的问题?

搜索微构网络的干货:

值班:15574303608 业务:在线咨询 技术:在线咨询

电话:0731-83862683 售后:在线咨询 邮箱:server@csweigou.com

地址:长沙市五一西路锦绣中环1116(五一广场平和堂对面)