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