掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
??? ???雖然BBS在沒(méi)落,加上隨著windphp的沒(méi)落,很多人看衰DZ的前途,其實(shí)我覺(jué)得這些東西僅僅是個(gè)工具而已。比如dz做的不只是論壇,還可以是各種方式的WEB應(yīng)用。
? ?? ? 我相信很多做DZ開(kāi)發(fā)的都清楚,有的用戶需求就是需要各種個(gè)性的。比如不同頁(yè)面應(yīng)用不同樣式的頭部和底部等等。而今天在實(shí)際開(kāi)發(fā)過(guò)程中就遇到了一個(gè)非常詭異的問(wèn)題。那就是頻道列表和內(nèi)頁(yè)的CSS緩存輸出出現(xiàn)混亂。
? ?? ? 開(kāi)始基本情況是這樣的:首頁(yè)(門(mén)戶首頁(yè))應(yīng)用一個(gè)獨(dú)立的頭部(引用路徑為common/headerindex.htm),門(mén)戶列表頁(yè)和內(nèi)頁(yè)應(yīng)用一個(gè)頭部(引用路徑為portal/list/header.htm),而論壇及其他的頁(yè)面的公共頭部就是引用默認(rèn)的路徑下的,當(dāng)然是經(jīng)過(guò)修改的,路徑為common/header.htm。
? ?? ? 我相信如果是通常不使用緩存機(jī)制來(lái)說(shuō),這一切都將非常正常,而大家要知道DZ是應(yīng)用了cache機(jī)制的。比如我們查看任意頁(yè)面的前端源代碼我們會(huì)發(fā)現(xiàn)css主體部分是形如data/cache/style_2_common.css?Oxl這種的,顯然這不是我們開(kāi)發(fā)模板的時(shí)候創(chuàng)建的文件,而是程序根據(jù)我們開(kāi)發(fā)的模板CSS寫(xiě)入緩存后得到的。正常情況下,不同頁(yè)面除了這個(gè)主體CSS緩存外,還會(huì)有其他的。比如門(mén)戶列表頁(yè)應(yīng)該還有”data/cache/style_2_portal_list.css?Oxl“格式的,門(mén)戶內(nèi)頁(yè)還有”data/cache/style_2_portal_view.css?Oxl“格式的。具體的大家可以參考官方開(kāi)發(fā)文檔關(guān)于CSS緩存機(jī)制,傳送門(mén)→→http://faq.comsenz.com/library/template/cache/cache_css.htm
? ???但就是上面看似非常正常的處理方式,卻得到了異常的結(jié)果:因?yàn)楦铝碎_(kāi)發(fā)模板的CSS樣式,我習(xí)慣用官方指導(dǎo)的extend_commons.css?;然后更新后臺(tái)緩存,后來(lái)發(fā)現(xiàn)文章內(nèi)頁(yè)正文部分明顯有部分樣式顯示不出來(lái),結(jié)果更新幾次緩存后又正常了,但列表頁(yè)又出現(xiàn)問(wèn)題了??偠灾褪强偸怯幸恍K地方不正常,不能完全加載CSS。結(jié)果通過(guò)查看前端源碼,發(fā)現(xiàn)除了主體CSS緩存文件引用外,對(duì)于當(dāng)前頁(yè)面的特征CSS緩存卻引用混亂,比如列表頁(yè)成了”data/cache/style_2_portal_view.css?Oxl”,內(nèi)頁(yè)反而成了“data/cache/style_2_portal_list.css?Oxl”。
? ???在開(kāi)發(fā)者群里面問(wèn)童鞋們,有好心的童鞋提示說(shuō)有CSS部分重復(fù)了,我就按照別人的經(jīng)驗(yàn)來(lái)檢查了,再者我以前同樣用dz開(kāi)發(fā)的時(shí)候,引用不寫(xiě)入主體CSS的其他CSS重復(fù)引用確實(shí)會(huì)造成這樣的現(xiàn)象。但我通過(guò)檢查后卻沒(méi)有發(fā)現(xiàn)出現(xiàn)了CSS重復(fù)的現(xiàn)象,然后就是糾結(jié)了好久,再去交流,顯然沒(méi)人理,我想也許大家沒(méi)有這么“巧合”地遇上這個(gè)問(wèn)題。
? ???這個(gè)時(shí)候我就在考慮是不是DZ的緩存機(jī)制造成的,從而因?yàn)橐玫穆窂交蛘呶募Q也能導(dǎo)致奇葩的沖突。雖然對(duì)DZ的緩存機(jī)制有一些了解,但對(duì)于其內(nèi)在的東西還是不了解,畢竟DZ實(shí)際上只是一個(gè)半開(kāi)源的產(chǎn)品。結(jié)果我就通過(guò)各種各樣的測(cè)試,發(fā)現(xiàn)還真可能是這樣的問(wèn)題引起的(之所以說(shuō)可能,是因?yàn)槲疫€沒(méi)完全從原理上完整的說(shuō)明,只是推理而已)。
? ?? ?總之解決通過(guò)以下方式就解決了:把我新建的view_new.htm(內(nèi)頁(yè)文章模板文件)、list_new(列表頁(yè)面文件),頭部引用由開(kāi)始的portal/list/header.htm改為common/headerview.htm和common/headerlist.htm?(其實(shí)這兩個(gè)文件就是的portal/list/header.htm副本),這樣以后就問(wèn)題沒(méi)有出現(xiàn)了。
? ?? ? 這里分享一下我在沒(méi)辦法的情況下“瞎測(cè)試”的幾種失敗方式:
? ?? ? 1、把新增的CSS全部刪除,故障依然存在(排除CSS重復(fù));
? ?? ? 2、把我修改的文件用默認(rèn)的覆蓋(除了引用頭部處做修改),排除我自己開(kāi)發(fā)這些文件的錯(cuò)誤存在;
? ?? ? 3、把我開(kāi)發(fā)的這些文件頭部引用改為引用默認(rèn)的頭部文件發(fā)現(xiàn)恢復(fù)正常,而改回引用原來(lái)頭部路徑,但用默認(rèn)頭部文件覆蓋那些頭部文件,卻錯(cuò)誤依然發(fā)生;
? ?? ? 4、其實(shí)在這個(gè)過(guò)程做過(guò)很多偏SB一樣的測(cè)試……..
? ?? ???到了這里我的結(jié)論就是:出現(xiàn)這種情況可能是因?yàn)镈Z的內(nèi)部機(jī)制造成命名或者路徑命名對(duì)其加載CSS文件造成影響,從而我們通常開(kāi)發(fā)過(guò)程中“正確”的方式在這里卻成為了“錯(cuò)誤”。也許DZ官方可能把我們的這種“錯(cuò)誤”提示過(guò)給我們開(kāi)發(fā)者,但是不知道是不是我個(gè)人的原因沒(méi)有看到這樣的提示或者相關(guān)的文檔(官方的開(kāi)發(fā)文檔我基本都看了個(gè)遍),由于不理解最DZ最核心的緩存作用機(jī)制,因此這里的結(jié)果也只能以“可能”下結(jié)論。
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流