一个Web报表项目的性能分析和优化实践(五):重构有助于性能优化么?
项目从初次开发到现在,已经快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 *,会少查询一些字段。
见仁见智
重构是否有助于性能优化,是一个见仁见智的问题。
根据我有限的重构和优化经验,我只能说,“重构有助于优化性能,但作用有限”。
打个比喻,当你学画画,想要画一个苹果的时候,“把苹果洗干净”是否有助于你画出一个逼真的苹果呢?
“把苹果洗干净”就是代码重构的过程。
“画出一个逼真的苹果”就是性能优化的过程。
你是怎么看待这个问题的呢?愿闻其详...
相关阅读
原文参见:http://FansUnion.cn/articles/3109(小雷网-FansUnion.cn)
一个Web报表项目的性能分析和优化实践(五):重构有助于性能优化么?的更多相关文章
- 一个Web报表项目的性能分析和优化实践(四):MySQL建立索引,唯一索引和组合索引
先大致介绍下项目的数据库信息. 数据库A:主要存放的通用的表,如User.Project.Report等. 数据库B.C.D:一个项目对应一个数据库,而且这几个项目的表是完全一样的. 数据库表的特点 ...
- 一个Web报表项目的性能分析和优化实践(三) :提高Web应用服务器Tomcat的内存配置,并确认配置正确
摘要 上一篇,一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间 ,讲述了项目优化的整体背景,重点讲述了统一显示了Web项目SQL语句的执行时间. 本篇,将重点介绍提高 ...
- 一个Web报表项目的性能分析和优化实践(六):设置MySQL的最大连接数(max_connections)
在上一篇文章中"一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例"提到,项目中新增几个数据库 ...
- [置顶] 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间
最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会. 1.我首先需要知道哪些函数执行了多少时间 ...
- 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间
最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会. 1.我首先需要知道哪些函数执行了多少时间 ...
- 一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例
最近,项目中遇到了数据库连接不够的问题. 异常信息com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data ...
- 一个Web报表项目的性能分析和优化实践(七):性能监测工具JavaMelody
简介 JavaMelody 能够监测Java或Java EE应用程序服务器,并以图表的方式显示:Java内存和Java CPU使用情况,用户Session数量,JDBC连接数,和http请求.sql请 ...
- 百度APP移动端网络深度优化实践分享(一):DNS优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享. 一.前言 网络优化是客户端几大技术方 ...
- App架构师实践指南六之性能优化三
App架构师实践指南六之性能优化三 2018年08月02日 13:57:57 nicolelili1 阅读数:190 内存性能优化1.内存机制和原理 1.1 内存管理内存时一个基础又高深的话题,从 ...
随机推荐
- POJ 2442 Sequence(堆的使用练习)
题目地址:id=2442">POJ 2442 真心没想到这题的思路. .原来是从第一行逐步向下加,每次都仅仅保存前n小的数.顺便练习了下堆.. 只是感觉堆的这样的使用方法用的不太多啊. ...
- 关于MAVEN找不到JDK的那点事
自从SUN被Oracle收购以后.JDK就由Oracle来提供了. 在新版本号之中,假设你下载安装JDK以后,又选择了JRE安装(当然,如今JRE直接叫做Java了),那么,恭喜你,在 C:\wind ...
- A. Ilya and Diplomas( Codeforces Round #311 (Div. 2) )
A. Ilya and Diplomas time limit per test 1 second memory limit per test 256 megabytes input standard ...
- struts2标签#、%、$取值
转自:https://blog.csdn.net/kosum/article/details/21375635 首先了解下OGNL的概念: OGNL是Object-Graph Navigation L ...
- java9新特性-16-Deprecated的相关API
1.官方Feature 211: Elide Deprecation Warnings on Import Statements 214: Remove GC Combinations Depreca ...
- VS导出方法名和方法备注的方法
VS导出方法名和方法备注的方法 方法一: 只能导出图片格式的UML 类图 1.点击查看类图 2.在空白处点击讲关系导出为图像 方法二: 是把整个类库的方法名都罗列出来 这个方便整理一些 具体方法如下 ...
- 二维码扫描ZXing简化
最近项目中有需要用到二维码扫描功能,于是查了相关资料,也没有过多地研究ZXing源码,只是有了最简单的功能,因为下载大牛的demo已经完全实现了功能,只是对其中的扫描线做了更改,需要的朋友可以直接使用 ...
- keytool常用操作
keytool 秘钥需要存储在秘钥库中,秘钥库可以理解为一个存储了一个或多个秘钥的文件.一个秘钥库可以存储多个密钥对,每个秘钥对你都需要给他们取一个名字. D:\software\Java\jdk1. ...
- md5sum---文件校验和
md5sum命令采用MD5报文摘要算法(128位)计算和检查文件的校验和.一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行. MD5算法常常被用来验证网络文件传输的完 ...
- python ORM理解、元类
元类 参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143191 ...