该文转自mx5721的博客:http://blog.csdn.net/mx5721/article/details/9138135
- 设计考虑
- 性能和安全的考虑
- 应用程序逻辑划分的考虑:逻辑分层,然后使用工具将DLL打包;
- 亲和度的考虑:验证方面的考虑;
- 减少往返次数:尽量减少与服务器的交互;
- 避免在长时间任务中的阻塞:可以使用异步,.net也可以设置异步;
- 使用缓存:善于使用缓存来提高程序的性能,将常用且不常变动的内容缓存;
- 避免不必要的异常,尽量介绍异常的发生,应该在逻辑编码的过程中避免异常的发生如果不需要查看详细,可以直接使用try。。。final。
- 线程方面的考虑
- 使用线程池的注意事项
- 避免手工创建线程
- 避免异步调用,除非你有额外的并行任务
- 资源管理
- 对资源进行池化管理
- 显式的关闭和销毁资源(using,Close,Dispose)
- 不要对池化资源进行缓存
- 尽可能晚地获取,尽可能早的释放资源
- 避免按照请求身份进行模拟
- 页面设计
- 减少页面体积:1压缩页面(Absolute HTML Compressor和Weblog Expert该工具可以压缩文件);2尽量将脚本和CSS等代码写成单独的文件或者调用相关的CDN文件;3适当的关闭ViewState;4.尽量限制使用图片或者使用压缩的图片;
- 启用缓冲功能:Buffer="true";
- 使用IsPostBack来减少重复的处理;
- 划分页面的内容提高缓存效率和简化呈现
- 确保页面可以批量编译
- 确保Debug设置为false
- 优化循环(for,foreach)
- 考虑使用Server.Transfer而不是Response.Redirect;Response.Redirect会先从服务器端详客户端发送反馈信息告诉客户端将转向;而前者将直接从服务器端跳转,这样就比后者减少一次交互;不过前者跳转后在URL中地址是不改变的并且不会发出完整的HTTP请求;
- 使用客户端验证;
- 服务器控件及其使用
- 谨慎使用ViewState;可以通过重写SaveControlViewState来压缩,LoadControlViewState来获取ViewState
- 使用服务器控件的一些策略;
- 避免创建层级过多的内容结构
- 数据访问与绑定
- 避免使用Page.DataBind;
- 减少DataBinder.Evel的使用;避免使用Evel("FirstName"),尽量使用<%#((Employee)Container.Item).FirstName%>;可以使用<%#Container.Item.DataIndex%>获取当前下标
- 尽量使用数据库分页,而不是用服务器自带的分页功能;可以使用OFFSET关键字进行分页;ROW_INDEX()可以获取当前影响行的下标,可以使用它来进行分页操作;
- 使用DataReader,LinqToSql中可以这样指明,Object
- 尽量使用存储过程和参数化查询;
- 阻止用户获取大量数据(分页,筛选,母子视图);关于母子视图是指页面显示方面的;
- 考虑数据缓存;<%@ OutputCache Duration="10" VaryByParam="none"%>方式进行页面缓存
- 何时使用Partial Page或Fragment Cache
- 分离动态数据和静态数据
- 配置内存限制
- 缓存必要的数据
- 正确的刷新数据
- 选择正确的缓存位置
- 使用VaryBy这个特性
- 使用Kernel cache
- 状态管理
- 理解状态管理(应用程序状态,会话状态,视图状态,其他);1,尽可能通过客户端存储简单的状态2.考虑序列化成本
- 应用程序状态;1,使用静态属性来取代
- 会话状态,session存储在服务器端,cookie存储在客户端,但是每次会发送到服务器端;
- 异常处理
- 实现Global.asax的异常处理:protected void Application_Error(object sender,EventArgs e){var error = Server.GetLastError();//记录log}
- 监控应用程序异常
- 尽量使用try/finally
- 在代码中尽可能避免异常
- 恰当的使用超时设置 httpRunTime executionTimeout="1000"
- 安全方面的考虑
- 限制不必要的服务器流量
- 关闭匿名访问(如果可能)
- 验证用户的输入
- 必要按照每个用户身份请求进行身份莫伊
- 避免缓存敏感数据
- 区分安全和不安全的内容
- 只有在需要的页面使用SSL(如果可能,使用硬件的方案)
- 使用绝对路径做导航
- IIS 7.0的处理模式
- 经典模式
- 集成模式(应该优先使用)
- 配置IIS压缩
- CCC&javascript压缩(使用Boundle组件进行压缩)
- CDN
- 动/静态页面压缩
- IIS负载均衡最佳实践
- 网卡配置
- 协议配置
- 使用负载均衡管理器(NLB)
- 群集参数优化
- 群集IP配置优化(使用ServerFarm进行配置负载均衡、使用ARR进行负载均衡)
以下是扩展内容:
- connectionstrings.com描述如何写连接字符串,考虑安全性和程序系能;
- fiddler2.com可以查看页面执行的详细情况;
- ilmerg合并DLL文件,提高性能:开发中尽量分层,部署的时候可以使用工具将DLL文件整合在一起;
- ILSpy,很好用的反编译工具;
- using:继承了IDisposable接口的类都可以用using;
- 在visual studio命令行中输入ildsm可以讲dll文件转为IL语言
- CDN:Content Delivery Network,如微软的CDN(微软为公众提供的功用借口)
- maxRequestLenght=""可以设置用户单次获取的大小,常用于下载限制大小;
- processModel memoryLimit=""设置缓存使用服务器内容的百分比
- 如何迁移会话(session)
- 给自定义方法加上异常提示:在注释中可以使用exception关键字:///<exception cref="System.OIException"><'exception>
- Web Plateform Installer 提供微软官方开发、部署等工具的下载
- Win Merge 常用比较文档工具
- ///<reference path=""/>在调用js的时候很有用,比如引用jquery的min.js和开发版本的js文件,这个时候可以在页面中直接调用min.js在单独的页面js文件中///<reference path="1.8.js"/>
- Boundle组件可以讲多个js等文件组装到一个指定文件中Boundle可以有效减少请求数(MVC中App_Start/BoudleConfig.cs文件中可以查看实例)
- 可以通过Event Viewer来查看相关日志(IIS重启等事件日志)