[ECSide] ECSide2.0优化笔记(也适用于其它Java程序)

topcloud 2007-11-16
前面发过一个帖子,说自己在使用ECSide时遇到性能问题,到现在都无人问津。看来只有我一个人遇到这个问题了。无奈之下,只好自己开始优化。
下面就是我的优化历程:
1.寻找待优化点。
  (1).数据记录多比记录少时处理的慢,这说明行处理可能存在待优化点。
  (2).列多比列少时处理的慢,这说明列处理可能存在待优化点。
  (3).执行频率高和有循环的程序块通常也是可能存在待优化点。
  ...
2.明确详细的优化策略
  (1).字符串+时,String替换为StringBuffer(老套路啦)
  (2).new String("ZZ")替换为String.valueOf("ZZ");
      new Integer(N)替换为Integer.valueOf(N)
      int i=0; String str=""+i;替换为 int i=0; String str=String.valueOf(i);
      Long,Double等等也是如此
  (3).Map,List,Set等集合变量指定包容数据类型
  (4).循环体类不要出现变量声明
  (5).一个if else能处理的就不要用两个if
  (6).使用局部变量,尽量减少.操作。
  (7).减少不必要的逻辑判断。(如果能用测试覆盖工具测试就好了)
  (8).减少循环次数,能不循环就不,能少循环就少循环一次。
  (9).减少魔术数字或者字符串,特别是重复次数太多的。替换为静态常量。
  (10).清除不用的局部变量和成员变量。
3.确定修改对象
  我主要对以下这些类做了代码修改。
  org.ecside.tag.TagUtils
  org.ecside.tag.RowTag
  org.ecside.tag.ColumnTag
  org.ecside.tag.ColumnsTag
  org.ecside.tag.BaseTag
  org.ecside.util.ECSideUtils
  org.ecside.util.RequestUtils
  org.ecside.util.ServletUtils
  org.ecside.core.TableModelImpl
  org.ecside.core.TableModelUtils
  org.ecside.view.html.ColumnBuilder
  org.ecside.view.html.FormBuilder
  org.ecside.view.html.RowBuilder
  org.ecside.view.html.TableBuilder
  org.ecside.view.DefaultHtmlView
  org.ecside.tag.form.ECSideFormTag
  org.ecside.tag.form.ECSideFormTagUtil
  ......
4.编译打包,重新测试。
  经过代码修改,程序的处理速度有了明显的提高,大体上是优化前耗时的一半。

结论:
真是细节决定成败呀!由此可见,我们应该把良好的代码编写规则牢记在心。
写出漂亮且高效的代码。对于我们最常用的String,Integer等类应该看看它的源代码。
了解它的处理机制。
二十一 2007-11-17
能把优化后的代码共享下么
yeshucheng 2007-11-18
希望你能共享代码,能让大家都学习下!
pn2006 2007-11-26
发个优化后的版本吧,免得大家又要自己去优化。 ^_^
appleboy 2007-11-27
希望楼主能把优化后的版本共享下
谢谢了
topcloud 2007-11-30
对不住大家了,优化后性能虽然有所提升但是还不理想。目前还在修改中。
appleboy 2007-11-30
楼主辛苦了
Global site tag (gtag.js) - Google Analytics