项目从初次开发到现在,已经快3年了。期间,有N个工程师参与过。

需求方面:增加减少,反反复复,无数次;人力方面:增加减少,不稳定;时间方面:功能开发着急上线,Bug开发紧急修复。

因此,代码臃肿,问题颇多。

自从毕业加入到项目,深感代码质量问题对项目开发效率的影响,因此经常会对项目进行“重构”和“优化”。

主要经历了2次大的重构和无数次小的改进。

今天,特别整理下,希望今后可以做得更好。

重构事项

1.统一标准。

  包、类、方法、字段等命名按照Java标准规范那样,统一命名。

2.重新组织代码。

a. 将项目代码,按照业务逻辑等原则,重新组织到不同的包中。

b. 按照一定的原则,调整类中的方法。

比如对于数据访问层Dao的方法,严格按照查询、增加、修改、删除这样的顺序组织。

而且,使用和修改频率高的代码,放在靠前的位置。

3.增加必要的注释。

对于那些业务比较复杂,容易混淆的代码,加上清晰简洁的注释。

4.删除无用的代码。

将废弃的功能代码,无用的注释,先用@Deprecated标记,过段时间,然后彻底删除。

5.提高代码复用。

Dao层:编写一个实现了常用CRUD功能的BaseDao。

工具层:对常用的工具代码,进行整理,统一到工具库中。

6.清理数据库。

a.将数据库中没有用到的表、字段全部删除。

b.优化表的数据类型。比如将longtext的字段,修改为varchar(20)。

c.规范化表和字段的命名。比如用户表用User,用户地址用userAddress表示。

同时,Java代码和实体配置文件,尽可能与数据库表相统一。

参考建议

更多重构和优化事项,不再赘述。

有兴趣的同学,可以看看《代码大全》、《重构》、《编写可读代码的艺术》这3本书。

重构有助于性能优化么

我只能说,有一定的帮助。

a.重复代码比较少,注释清晰,命名合理的代码,看起来“赏心悦目”。

本质上,不太可能提高系统性能,但是算得上是性能优化的准备工作。

项目重构后,开发更有效率,Bug更少,这样才可能有更多的时间去做性能优化。

b.去掉数据库表中无用的字段,这还是有点作用的。

至少,在SQL查询的时候,比如select *,会少查询一些字段。

见仁见智

重构是否有助于性能优化,是一个见仁见智的问题。

根据我有限的重构和优化经验,我只能说,“重构有助于优化性能,但作用有限”。

打个比喻,当你学画画,想要画一个苹果的时候,“把苹果洗干净”是否有助于你画出一个逼真的苹果呢?

“把苹果洗干净”就是代码重构的过程。

“画出一个逼真的苹果”就是性能优化的过程。

你是怎么看待这个问题的呢?愿闻其详...

相关阅读

一个Web报表项目的性能分析和优化实践

原文参见http://FansUnion.cn/articles/3109(小雷网-FansUnion.cn)

一个Web报表项目的性能分析和优化实践(五):重构有助于性能优化么?的更多相关文章

  1. 一个Web报表项目的性能分析和优化实践(四):MySQL建立索引,唯一索引和组合索引

    先大致介绍下项目的数据库信息. 数据库A:主要存放的通用的表,如User.Project.Report等. 数据库B.C.D:一个项目对应一个数据库,而且这几个项目的表是完全一样的. 数据库表的特点 ...

  2. 一个Web报表项目的性能分析和优化实践(三) :提高Web应用服务器Tomcat的内存配置,并确认配置正确

    摘要 上一篇,一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间 ,讲述了项目优化的整体背景,重点讲述了统一显示了Web项目SQL语句的执行时间. 本篇,将重点介绍提高 ...

  3. 一个Web报表项目的性能分析和优化实践(六):设置MySQL的最大连接数(max_connections)

    在上一篇文章中"一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例"提到,项目中新增几个数据库 ...

  4. [置顶] 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间

    最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会.  1.我首先需要知道哪些函数执行了多少时间 ...

  5. 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间

    最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会.  1.我首先需要知道哪些函数执行了多少时间 ...

  6. 一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例

    最近,项目中遇到了数据库连接不够的问题. 异常信息com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data ...

  7. 一个Web报表项目的性能分析和优化实践(七):性能监测工具JavaMelody

    简介 JavaMelody 能够监测Java或Java EE应用程序服务器,并以图表的方式显示:Java内存和Java CPU使用情况,用户Session数量,JDBC连接数,和http请求.sql请 ...

  8. 百度APP移动端网络深度优化实践分享(一):DNS优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享. 一.前言 网络优化是客户端几大技术方 ...

  9. App架构师实践指南六之性能优化三

    App架构师实践指南六之性能优化三 2018年08月02日 13:57:57 nicolelili1 阅读数:190   内存性能优化1.内存机制和原理 1.1 内存管理内存时一个基础又高深的话题,从 ...

随机推荐

  1. Axure7.0在OS X Yosemite(10.10)中不能用的问题

    电脑升级到了10.10后发现axure7.0不能使用.解决办法也非常easy,就是又一次下载一个新的axure版本号,下载地址:http://www.axure.com/release-candida ...

  2. nj06---包

    二.创建包 1.包的概念 包是在模块基础上更深一步的抽象,Node.js的包类似于C/C++的函数库或者java的类库,它讲某个独立的功能封装起来,用于发布.更新.依赖管理的版本控制.开发了npm来解 ...

  3. ORM中基于对象查询与基于queryset查询

    感谢老男孩~  一步一步走下去 前面是视图函数 后面是表结构models.py from django.shortcuts import render, HttpResponse from djang ...

  4. Java类和对象5

    写一个Java应用程序,该应用程序包括2个类:Print类和主类E.Print类里有一个方法output()功能是输出100 ~ 999之间的所有水仙花数(各位数字的立方和等于这个三位数本身,如: 3 ...

  5. 日志文件支持unicode字符的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 开发的程序兼容多字节字符集和unicode字符集,最近发现一个问题,在unicode字符集下输出的日志文件是乱码的.显 ...

  6. 关于网易云音乐爬虫的api接口?

    抓包能力有限,分析了一下网易云音乐的一些api接口,但是关于它很多post请求都是加了密,没有弄太明白.之前在知乎看到过一个豆瓣工程师写的教程,但是被投诉删掉了,请问有网友fork了的吗?因为我觉得他 ...

  7. Monad的基本运算

    A monad is created by defining a type constructor M and two operations, bind and return (where retur ...

  8. 12 条实用的 zypper 命令范例 (转载)

    12 条实用的 zypper 命令范例 作者: Kerneltalks 译者: LCTT cycoe | 2018-12-12 13:29 zypper 是 Suse Linux 系统的包和补丁管理器 ...

  9. SCO Openserver、SCO Unix、SCO UnixWare、Solaris几者到底是什么关系,有什么相同或不同?

    Unix操作系统的历史漫长而曲折,它的第一个版本是1969年由Ken Thompson在AT&T贝尔实验室实现的,运行在一台DEC PDP-7计算机上.这个系统非常粗糙,与现代Unix相差很远 ...

  10. 一篇文章教会你理解Scrapy网络爬虫框架的工作原理和数据采集过程

    今天小编给大家详细的讲解一下Scrapy爬虫框架,希望对大家的学习有帮助. 1.Scrapy爬虫框架 Scrapy是一个使用Python编程语言编写的爬虫框架,任何人都可以根据自己的需求进行修改,并且 ...