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