Written By
欧阳振华 on 2008-10-23 19:39:38| 分类:
网站的优化及推广 | 查看次数:144
一个刚入门的初学者开发一个网站后,能从哪些方面对系统的性能进行提升呢?
- 编码级别.这个是最小的级别,可能也是对性能的提升产生效果最小的.不过,我们需要特别注意一些宝贵的资源释放,往往这些错误在测试的时候不容易发现,系统一旦上线接受高访问量的考验就崩溃了.
- 页面级别.对于WEB系统来说,页面是一个很重要的一部分,客户端和服务端就是通过静态的HTML,JS等代码进行交互的.页面的缓存策略,页面的大小直接决定了客户端讯问网站的速度和网络流量.页面级别的性能优化比编码级别更有效一点.
- 构架级别.一个好的构架能提升系统性能,而构架也可能成为整个系统的杀手.对于分布式的系统更是如此.如果在一个环节发生了问题就可能导致整个系统的性能产生明显巨大的问题.
- 配置与部署.一个同样的系统可能在两个相同硬件配置的服务器上产生明显的性能差异.由于网站是需要IIS进行解析的,换句话说,网站所有的流量都要经过IIS这个关口,如果IIS的配置不当的话,对网站造成的影响是致命的.
下面,我将就这几个方面介绍网站性能优化的一个具体做法,当然,方法并不是绝对的,所有方法都仅供参考.其中很多的方法我也是从一些网站性能优化的书上摘抄下来的.
一、编码级别的优化.
- 数据连接.
- 尽量晚打开连接,尽量早关闭连接.
- 优化SQL语句或者存储过程,尽量缩短查询运行时间
下面两个连接方法就有很大的差别:
- SQLConnection conn=new SQLConnection(".....");
- //打开连接
- conn.open();
- SqlCommand cmd=new SqlCommand("....",conn);
- ...
- ...
- cmd.ExecuteNonQuery();
- //关闭连接
- conn.Close();
- SQLConnection conn=new SQLConnection(".....");
- SqlCommand cmd=new SqlCommand("....",conn);
- ...
- ...
- //打开连接
- conn.open();
- cmd.ExecuteNonQuery();
- //关闭连接
- conn.Close();
上面的第一种方法就是过早的打开了数据连接,这样是非常消耗资源的,要像第二种方法样,在要执行查询的时候才打开连接.
- 数据查询
- Select记录的时候,只返回需要的字段,不要Select * 把所有的字段都返回,数据越多对于服务器的压力就越大.对于分布式程序还会占用更多的网络流量.
- 不要一次取出所有行,仅取出当前页面需要的数据,这就涉及到分页了.
- 尽量使用DataReader来进行数据读取,DataReader是只读向前形式读取数据的,性能要比Dataset高.
- 使用DataReader的时候,尽量一次返回多个记录集,需不是为每个记录打开一次数据库.
- 如果需要在一个代码段中执行多个SQL语句,可以使用存储过程来优化性能.
- 释放资源
- 其它优化
- 不要依赖异常.异常是不可知的错误,
- 使用泛型集合代替普通的集合. net2.0以上提供了很多泛型集合,使用泛型集合代替普通集合能提高性能.比如下面的代码耗时2908毫秒:
- ArrayList list=new ArrayList();
- for(int i=0;i<10000000; i++)
- list.add(i);
- int count=0;
- for(int i=0;i<list.Count;i++)
- count=(int)list[i];
改用泛型集合后代码耗时只用370毫秒
- List<int> list=new List<int>();
- for(int i=0;i<10000000; i++)
- list.add(i);
- int count=0;
- for(int i=0;i<list.Count;i++)
- count=(int)list[i];
- 不要大量使用反射,反射虽能减少项目依赖,但是会有比较大的性能损失,不推荐大量使用.
由于时间的关系,今天就写到这里,明天将写关于页面级优化的内容.