优化原则(持续更新)

时间:2022-09-20 20:45:15

优化原则:

1: 在能应付当前性能需求的情况下,不建议进行性能优化。

2: 仅仅优化性能瓶颈

3: 编码时必须进行压力测试

4: 优化时,考虑现实生活中遇到的问题,现实如何处理,代码也如何处理。

5: 优化的唯一方法:去掉没有必要的操作 和 采取高效的算法。可以看到所有的优化方法都离不开这条原则,而最常用、也最容易发现的方案就是去掉没必要的操作。

代码优化

 代码优化的唯一目的: 减少执行时间。

 两种优化方法: 减少没必要的内存分配;减少没必要的计算。

       当然这两种方法一般都会同时出现,如分配没必要的内存,分配这个操作就是没必要的计算。

内存分配:

    最好的效果:一次申请正好足够的内存。不过一般都做不到,只能尽可能。

    1:比如Java中的'+'进行字符串连接,不断产生新的char[]数组后又废弃不用。

    2:避免频繁的内存回收,对某些大数据任务可以多分配内存,减少GC的次数。

计算:

    计算一般涉及算法(数据结构)和缓存。

    1: 算法(数据结构)当然越快越好,比如:hashSet的搜索效率就比ArrayList高

    2: 不需要重新获取的东西就可以缓存起来,比如:处理过程中的中间结果

    3: 如果某些操作需要创建某些资源,比如网络连接。那么最好不要每次操作都创建一个,而是一个连接进行多次操作。

策略优化:

  以不同的交互策略来达到用户一致的体验。

  最常用的策略:当用户操作时才进行处理,将集中式处理改为分散式。

例子1:懒加载

比如一张单据有很多子页签,用户查看时单据仅仅加载单据的数据,而不需要加载子页签的数据。只有用户点击子页签时才加载对应的页签数据。

这样就将集中式的查询分散到用户操作中去,提高用户的体验并减少系统瞬间压力。

例子2:

这里借用一下JavaEye中别人讨论过的例子:

   某个系统要求在某个时间将用户积分清零的需求。

   最直接的方案: 定时将系统中所有的用户积分清零。其弊端在于:如果系统用户量特别大,则在一小段时间内用户将不可进行积分操作。

   优化后的策略:用户进行积分操作是分散的,同一时间进行积分操作的压力是很小。因此可以考虑在用户进行积分操作时才考虑是否进行积分清零。