以下的这些配置是目前为止我所发现的最佳基准配置,依据不同的主机运行环境,更新频率,访问量,以及用户数量,网站的优化配置会有些不同。经过优化的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运行速度越来越快!!