对老项目进行性能优化的一些总结

    最近手头上的工作就是对以前的老项目进行整理。其中有一个几年前的web项目,采用spring + struts 1的架构,随着业务数据量越来越大,性能也变的越来越差。于是对其性能调优也就成了当务之急。

    对于老项目,我想大概没人会喜欢去做维护或者整理甚至重构一类的工作,主要原因有以下几点:

  1. 以前项目的开发人员已经变化了,现在找人找不到,文档也不健全,很多信息只能看代码才行
  2. 以前的代码写的不太好,或者不符合现在维护人员的代码习惯,读起来很费劲,碰到一些难懂的,看又不太容易看懂,修改进来又有担心
  3. 很多test代码不全,这也是不敢修改的原因之一,或者test代码有大量的错误或者是有依赖,时过境迁,这些依赖已经不存在了,test代码很难运行,只好重新写过

    但不管千难万难,总得要硬着头皮做下去,对于这类项目,我一般会采用比较保守的方式来进行。性能优化一般分为前台和后台两部分,后台一般是sql的性能优化,通过对db表、索引、分区等分析来完成,在尽量不修改表结构的前提下,尽量提高sql的性能,很多sql需要重写,但好在只要和原来dao输出的结果一致就没什么问题,这部分工作占了性能优化的很大部分。

  1. sql查询尽量避免大表互相关联
  2. 对于一些不区分大小写的模糊查询,以前是通过lower(fieldname) like ‘%…%’的方式,这样就无法用到建立在fieldname上的索引了,建议增加一个lower_fieldname列,用于查询。(需要注意对于一些特殊字符的处理)
  3. 大表注意分区,有些表以前没考虑分区,数据量增大之后,需要考虑分区,分区之后,性能大为提升
  4. 根据执行计划分析索引,有些索引建立的不合适的,重新建立

    前台部分的优化,只是要结合ajax方式来取数据,这有几个原则:

  1. 尽量避免大表关联查询,可以通过sql先查询主表的数据,再用ajax方式来取关联的分表数据
  2. 在所有查询的过程中,增加一些用户友好的提示,如增加loading page等
  3. 对于数据list和page信息,也分开来取,先取得当前page list data,再通过ajax方式来取page信息

    所有修改的内容,在原来的test代码的基础上,增加test,确保修改的bug减到最小。同时注意补充design文档,代码加详细注释,这些一定要跟紧开发人员,虽然这些会浪费一些开发时间,但总的来说是值得的。对于不放心的代码修改,一定要进行code review。

posted @ 2010-09-01 09:46  lettoo  阅读(1501)  评论(1编辑  收藏  举报