優(yōu)化DotNetNuke網(wǎng)站性能的10個(gè)技巧
以下的這些配置是目前為止我所發(fā)現(xiàn)的最佳基準(zhǔn)配置,依據(jù)不同的主機(jī)運(yùn)行環(huán)境,更新頻率,訪問量,以及用戶數(shù)量,網(wǎng)站的優(yōu)化配置會(huì)有些不同。經(jīng)過優(yōu)化的DNN也是可以運(yùn)行得很快的。
以下我將使用DNN5.01中文版示范,這些技巧同樣適用于DNN4.x。
1. 主機(jī)管理 -> 主機(jī)設(shè)置中的基本優(yōu)化
首先我們來優(yōu)化主機(jī)設(shè)置,我僅在這里指出關(guān)鍵的設(shè)置
外觀
“顯示版權(quán)信息”:禁用此項(xiàng)
◆高級(jí)設(shè)置 -> 身份驗(yàn)證設(shè)置 (只適用于DNN4.x,DNN5設(shè)置方法見下) 禁用不需要的身份驗(yàn)證方式, 通常我會(huì)禁用LiveID和OpenId以增加用戶登陸的速度
◆高級(jí)設(shè)置 -> 性能設(shè)置
◆網(wǎng)頁狀態(tài)保存方式:“頁面”,這里是指viewstate的存儲(chǔ)方式
◆模塊緩存方式:“重量級(jí)緩存”,這里使用的是頁面輸出緩存
◆客戶端緩存:“Public”,這樣瀏覽器就會(huì)緩存js,css,圖片這些資源文件
◆壓縮設(shè)置:“GZip方式壓縮”,注意這里只是Gzip壓縮只是壓縮aspx動(dòng)態(tài)頁面,javascript, css等資源文件請?jiān)贗IS中設(shè)置壓縮。壓縮后頁面大小一般會(huì)減少60%以上,速度提高也節(jié)省帶寬。
◆高級(jí)設(shè)置 -> 其它設(shè)置
◆任務(wù)調(diào)度模式: “計(jì)時(shí)器模式”,HTTP請求模式對(duì)訪問率低的網(wǎng)站會(huì)造成初次訪問加載過重的現(xiàn)象。啟用事件記錄緩存? :選中此項(xiàng)。是否自動(dòng)同步文件? :禁用此項(xiàng)
2. 卸載不需要的模塊和Provider
卸載不需要的模塊可以提高加載網(wǎng)站的速度,卸載模塊后模塊對(duì)應(yīng)的程序集(dll)也會(huì)從bin文件夾中移除,這樣會(huì)減少初次讀取網(wǎng)站時(shí)加載程序集到內(nèi)存的數(shù)量,以提高網(wǎng)站讀取速度。DNN安裝向?qū)е心J(rèn)模式只會(huì)安裝基本的模塊和Provider, 但如果安裝時(shí)選擇了全部模塊及Provider請按以下方式卸載, 當(dāng)需要時(shí)再安裝。
DNN4.x :“主機(jī)管理 -> 模塊定義” 中刪除不需要的模塊
DNN5.x :“主機(jī)管理 -> 功能擴(kuò)展” 中刪除不需要的擴(kuò)展,例如不需要論壇時(shí)就不要安裝,網(wǎng)站不提供OpenId驗(yàn)證方式就卸載掉。
3. 禁用不需要的身份驗(yàn)證方式
此設(shè)置只適用于DNN5, 在DNN5中如果安裝了多種身份驗(yàn)證方式,例如OpenID, LiveID, Active Directory在站點(diǎn)管理中可以針對(duì)不同的站點(diǎn)關(guān)閉開啟需要的驗(yàn)證方式,這點(diǎn)比DNN4.x要靈活。在這里我們要禁用不需要的身份驗(yàn)證方式已提升登陸頁面速度。 在“站點(diǎn)管理 -> 功能擴(kuò)展中”選擇擴(kuò)展類型“Authentication System(身份驗(yàn)證系統(tǒng))”然后編輯不需要的身份驗(yàn)證系統(tǒng)并禁用,通常我會(huì)只開啟Default Authentication(默認(rèn)的DNN驗(yàn)證方式),禁用:
DNN_OpenIDAuthentication
DNN_LiveIDAuthentication
DotNetNuke Active Directory Authentication Project
4. 調(diào)度管理的設(shè)置
在“主機(jī)設(shè)置 -> 調(diào)度管理中”根據(jù)需要延長或關(guān)閉不需要的調(diào)度任務(wù),以防止頻繁執(zhí)行調(diào)度任務(wù)增加服務(wù)器壓力。
如果網(wǎng)站不提供站內(nèi)搜索,則禁用DotNetNuke.Services.Search.SearchEngineScheduler
如果網(wǎng)站提供站內(nèi)搜索,則把DotNetNuke.Services.Search.SearchEngineScheduler任務(wù)頻率設(shè)置為1天重試頻率設(shè)為12小時(shí),這將會(huì)極大的減緩服務(wù)器壓力。
同樣把DotNetNuke.Services.Scheduling.PurgeScheduleHistory任務(wù)頻率設(shè)置為1天
以上1-4就是最基本的通過網(wǎng)站配置實(shí)現(xiàn)的優(yōu)化,總的來說以上的改變會(huì)帶來顯著的性能提升,但大多時(shí)間仍然不能足夠的保正網(wǎng)站平滑的運(yùn)行,因此依據(jù)不同情況我會(huì)進(jìn)行以下的優(yōu)化。
5. 定期清除事件記錄
很多用過DotNetNuke的朋友會(huì)發(fā)現(xiàn)數(shù)據(jù)庫中[EventLog] 表(記錄站點(diǎn)“事件記錄”的表)可能會(huì)成為導(dǎo)致性能下降的罪魁禍?zhǔn)滓驗(yàn)镈NN網(wǎng)站中的很多操作都會(huì)被記錄到事件記錄(EventLog)中, 開啟事件記錄緩存會(huì)減緩尺寸過大的[EventLog]表對(duì)網(wǎng)站帶來的副作用,但是最佳的優(yōu)化方法莫過于定期清除“事件記錄”。 方法有很多種
如果只有一個(gè)站點(diǎn),用主機(jī)管理員(host)帳號(hào)登陸在站“點(diǎn)管理 -> 事件記錄”中選擇清除所有記錄。如果有很多站點(diǎn)一個(gè)一個(gè)清除很麻煩,直接到 “主機(jī)管理 -> SQL查詢” 里運(yùn)行 "TRUNCATE TABLE eventlog" 則可一次清除[eventlog]的所有記錄。如果對(duì)數(shù)據(jù)庫有管理權(quán)限則可設(shè)置數(shù)據(jù)庫調(diào)度任務(wù)定期自動(dòng)執(zhí)行"TRUNCATE TABLE eventlog"
另外也可以使用Scheduled SQL Jobs這個(gè)免費(fèi)模塊來定期清空事件記錄
請記住,我們必須保持“事件記錄” (eventlog表)的記錄數(shù)在一個(gè)很小的范圍內(nèi),這樣才能保證網(wǎng)站的運(yùn)行效率,很多國外收費(fèi)很貴的DNN專用主機(jī)空間所作的主要優(yōu)化就是定期清除事件記錄。當(dāng)然在“站點(diǎn)管理 -> 事件記錄 -> 編輯記錄設(shè)置" 中關(guān)閉不需要的記錄,例如APPLICATION_START, APPLICATION_END也是個(gè)不錯(cuò)的方法。
6. 皮膚優(yōu)化
皮膚優(yōu)化也是很重要的,購買或制作皮膚時(shí)一定要選用支持XHTML的使用DIV+CSS制作的皮膚,這會(huì)增加網(wǎng)頁讀取的流暢度,css也可以被瀏覽器緩存也可以增加頁面讀取速度。 另外選擇一個(gè)支持CSS的菜單控件,例如House Menu皮膚控件來替換默認(rèn)的皮膚控件可以減少頁面尺寸30%甚至更多。優(yōu)化后的皮膚可令頁面讀取速度減少50%以上。
另外關(guān)于客戶端優(yōu)化Yahoo的網(wǎng)站優(yōu)化最佳實(shí)踐是個(gè)很好的指南,我們也可以下載Firefox中的YSlow插件來查看優(yōu)化的效果。
7. 防止網(wǎng)站重新加載編譯
很多人對(duì)DNN速度慢的印象大多來自于初次訪問速度過慢,這其實(shí)是因?yàn)锳sp.Net網(wǎng)站初次加載到程序池需要進(jìn)行動(dòng)態(tài)編譯導(dǎo)致感覺速度很慢,其實(shí)加載之后速度就會(huì)很快了。 另外對(duì)于訪問量不多的網(wǎng)站, 網(wǎng)站在靜止一段時(shí)間后會(huì)被從程序池中踢出,當(dāng)有用戶訪問時(shí)網(wǎng)站會(huì)重新加載編譯,所以對(duì)于訪問量少的網(wǎng)站用戶總是覺得網(wǎng)站很慢。 解決這個(gè)問題的關(guān)鍵是保持網(wǎng)站在程序池中活躍,以防網(wǎng)站重新加載。這方面的工具不少,原理一般就是定時(shí)ping網(wǎng)站保持網(wǎng)站活躍。
我比較推薦的是一個(gè)免費(fèi)工具Smarter Ping 之前有個(gè)客戶的網(wǎng)站訪問量很小導(dǎo)致每次訪問網(wǎng)站都會(huì)重新加載,一般要等2,30秒,在使用了Smarter Ping之后每次都是一下就打開了不超過2秒。 Smart Ping是一個(gè)Windows Service它會(huì)定時(shí)ping你預(yù)設(shè)的網(wǎng)站,這里建議時(shí)間間隔設(shè)為10分鐘一次,另外DNN也有提供一個(gè)專門響應(yīng)這類工具的網(wǎng)頁在網(wǎng)站根目錄下”KeepAlive.aspx“ 添加要ping的網(wǎng)址時(shí)則可設(shè)為http://www.mydnn.com/KeepAlive.aspx
8. DNN優(yōu)化模塊
在這里不得不提Snapsis PageBlaster這個(gè)優(yōu)化模塊,它可以提供全方位的優(yōu)化,例如頁面壓縮, 緩存, 合并靜態(tài)文件減少http請求... 大大提升頁面讀取速度。如果前面優(yōu)化效果不理想可以試試這個(gè)模塊。
9. 服務(wù)器優(yōu)化建議
在不同運(yùn)行環(huán)境下的優(yōu)化配置
云平臺(tái):類似于Mosso這種云服務(wù)平臺(tái)也是可以支持DNN的,但是在這種環(huán)境下模塊緩存到內(nèi)存是不工作的,所以在主機(jī)設(shè)置里我們要把“模塊緩存方式”設(shè)為硬盤,這樣會(huì)提升20-30%的性能。其它的設(shè)置基于以上優(yōu)化不用變動(dòng)。
共享主機(jī):共享主機(jī)中"模塊緩存方式"設(shè)置為內(nèi)存沒什么問題,因?yàn)閮?nèi)存比磁盤要快很多,但是對(duì)于很繁忙的Web服務(wù)器,例如存放上百個(gè)網(wǎng)站的Web服務(wù)器使用共享的應(yīng)用程序池,每個(gè)網(wǎng)站分配到的內(nèi)存可能都會(huì)很少,這種情況下緩存到內(nèi)存的命中率會(huì)很低,大部分時(shí)間會(huì)從服務(wù)器重新請求,這時(shí)設(shè)置“模塊緩存方式設(shè)”為硬盤的效果會(huì)好些。
虛擬主機(jī):情況和共享主機(jī)類似,“模塊緩存方式”默認(rèn)設(shè)置為內(nèi)存,根據(jù)具體情況如果網(wǎng)站很多覺得速度慢改為硬盤試試看。
對(duì)于在本地測試使用debug模式在Visual Studio中運(yùn)行的朋友,不要期待在這種環(huán)境下速度會(huì)很快,這種模式下運(yùn)行DNN這種大型網(wǎng)站會(huì)很吃力,在IIS中設(shè)置網(wǎng)站速度會(huì)提高不少。
10. 修復(fù)反復(fù)發(fā)生的錯(cuò)誤
反復(fù)發(fā)生的錯(cuò)誤異常是所有網(wǎng)站的性能殺手, 每當(dāng)有不能處理的異常拋出都會(huì)對(duì).net的進(jìn)程造成一些影響,并且DNN系統(tǒng)會(huì)捕捉并記錄異常到數(shù)據(jù)庫的[EventLog]表,對(duì)于高訪問量的網(wǎng)站這種代價(jià)是很難承受的。經(jīng)常查看“站點(diǎn)管理 -> 事件記錄”確定沒有反復(fù)發(fā)生的錯(cuò)誤是保證網(wǎng)站正常工作的前提。 如果發(fā)現(xiàn)此類異常要及早處理, 異常可能是由第三方模塊造成,也可能是系統(tǒng)本身的bug,對(duì)于不熟悉.Net除錯(cuò)和DotNetNuke系統(tǒng)的朋友,可能會(huì)比較麻煩,這時(shí)最好利用社區(qū)的幫助或者咨詢專業(yè)公司。
總結(jié)
以上就是我優(yōu)化DotNetNuke網(wǎng)站性能的一些經(jīng)驗(yàn), 希望有自己獨(dú)門優(yōu)化秘籍的朋友也來和大家分享分享,讓DNN運(yùn)行速度越來越快!!