网站优化有很多种,养成良好的编码习惯,平时注意知识点和经验的积累,是提升个人技术乃至网站技术含量的重要途径之一。
1.代码规范
应尽量保持前后台代码整齐,包括使用Tab键使html和cs代码看上去层次结构清晰,这样可使后续网站更容易维护。在页面输出的内容一定要注意过滤html或进行编码,防止一些非法输入和攻击脚本。
2.编程思想
目前来说面向对象的编程思想应该算是比较公认的了,也是最基础的。比如我们在查询时返回的数据类型尽量是实体封装了的对象,而不是DataSet数据集,即使微软为DataSet提供了肥沃的土壤。使用实体能更好的阐述对象间的关系,便于以后进行扩展。而即便是需要使用反射将DataSet转换成实体对象类型,我想网站也不会差这一点性能。
3.层次结构
无论你的项目是使用几层结构,有无使用三层架构,但至少必须保证页面后置代码不会出现SQL语句,这也是最基本的。一般我们对数据库的访问都会对进行封装,每个对象都有对应的DAO类。但如果SQL语句到处是,有一天数据库改了一个表的列名,那就折腾了。也就是说,网站需要有一个条理清晰的层次结构。
4.框架技术
成熟的框架一般使我们的开发更为快捷,同时也可提高网站的质量和安全性。比如ORM框架,底层一般使用参数化的查询方式,这样就可避免了我们自己拼接SQL时带来注入的风险。并且一般ORM都会考虑跨数据库的情况,因此也使得网站数据库的移植性更高,在某些场合还是很有用的。
5.SQL优化
SQL查询时间一般占用了网站应用程序处理的大部分时间,SQL性能优化是提高网站访问速度的重要途径,尤其是在网站访问量大数据多的情况,SQL优化显得尤为重要。下面说几点我平时SQL性能优化的方法:
1)表结构优化
首先,数据库的结构设计要合理,同时可针对一些常见查询需要,增加必要的冗余字段,如栏目表增加文章数等,同步的方法可在更新时同步一次或利用数据库定时作业来完成。冗余结构的好处是在查询时可减少每次统计归档的开销,更快捷的查询出结果。
2)减少返回列
对于查询尽量少返回列,没有必要的列不返回,因为每多返回一列,服务器读取逻辑磁盘的次数Reads可能会增加,从而导致Duration执行时间增加。
3)关联表优化
对于一些中间表或包含外键字段的表,应尽量减少关联表次数。如果实在没有办法,可以把一个查询分成几个步骤来查询,比如查询文章中间表可先只查询出文章ID,再根据文章ID查询出文章的具体信息。因为我们查询时一般都会分页,而如果数据量很大时关联查询当然就很慢,而如果我们只根据已分页的返回的那么几十条ID记录再去关联查询,那速度就很快了。如果我们有使用ORM框架,可考虑使用延迟加载。
4)排序字段调整
一般我们查询会根据时间来排序,而如果我们表的主键是自增或是有规律的,建议采用主键唯一字段排序代替时间字段排序,因为主键字段一般创建了聚集索引,而如果使用其他字段会增加排序的成本。
5)分页查询优化
我平时使用SQL2005自带的分页函数ROW_NUMBER较多,使用ROW_NUMBER() OVER(ORDER BY fdArtiCreateAt DESC) AS index_产生一个自增序号来进行分页。但发现一个问题,查询第一页时速度很快,但页数越后查询越慢,到最后一页和第一页速度相差了几十倍。目前这个问题我还没有找到很好的解决办法,不知道其他数据库是否也存在这样的问题?感觉和排序字段的升序ASC和降序DESC有关,我试过把最后一页的排序颠倒过来,然后查询第一页的数据,如果排序字段唯一的话结果就是按正常排序的最后一页,但速度会快很多,这个需要在分页时对页码进行判断,比较麻烦。
6)服务器调优
软硬件的配置可以把服务器调节到最优的状态,相反没有配置好设置可能会对服务器性能造成影响。如服务器属性的内存里最大服务器内存(MB)和每次查询占用的最小内存(KB)等,如果这些参数没有配置好,就可能会制约影响服务器正常工作。
6.发布网站
发布网站时我们需要把程序调成Release模式,Debug版中会输出一些调试信息,而Release版则会优化编译,使程序在运行上是最优的,可以发现Release版生成的dll文件比Debug版的大小都小一些。