漫谈项目设计&重构&性能优化
重构的好处:
重构能够改进软件设计,随着项目需求的变更,项目体积的变大早已与最初的设计大相径庭,代码结构变得凌乱、复杂,如果不进行重构,则很难添加新的功能。
1、使项目代码更容易理解
很多情况下是由于项目赶进度和不注重质量导致的。那么通过重构可以帮助代码维持自己该有的形态。
项目开始的时候,设计并没有考虑到方方面面,因为你不可能预测到后面的所有需求。同时你也不能把每个功能都做预留,做成灵活可变,如果最后你预测失败,那么意味着你所做的灵活性是多余的,浪费了时间且增加了开发难度。这种情况叫做过度设计。
为了避免这样的情况,项目之初只做必要的设计。随着项目的变更,软件结构需要重新调整。通过重构可以改良最初的设计,使得项目符合最新的需求。
经验告诉我们,当下只管建造可运行的最简化的系统,至于灵活而复杂的设计,多数时候你都不会需要它。
2、帮助你找到BUG
重构需要你深入代码结构,这样使得你搞清楚程序结构的同时,找出隐含的BUG。
3、重构提高编码速度
重构后的代码,代码结构被改良,良好的设计能够加快开发速度。
重构与性能优化:
重构是为了让代码易于理解,你常会做出一些使程序运行变慢的修改。
重构的过程中,不要同时最求优化性能。特别当重构代码优化与性能优化两者出现冲突的时候
通常情况下重构会使代码优雅,性能优化为了提高性能不得不采用一些技巧来实现从而有可能使得代码变得复杂
而且,有时性能好坏不是单凭感觉出来,多了几个for循环带来的性能下降通常没有你想象中那么大,一定要量化,能测出数据来证明是否由此导致的性能下降。
此时要注意我们的目的是重构,重构的手法可能会使得软件性能有所下降,也应该往下执行。
性能优化属于另外一个关注点,等重构完成后,项目设计良好,此时再去做性能优化也更容易。
若仅凭感觉来决定说为了提高性能而放弃重构代码,这是一个错误的想法。
正确的做法是:
首先写出可运行的软件,然后调整它以求获得更快的速度。
如果当你在开发的过程中时刻追求软件的性能,首先会导致开发难度增加、开发时间变长。同时大多数情况下来分析,你会发现你花费的大部分时间都是在调整一些小部分的代码上以追求性能的增加,实际上这小部分代码最终被执行的概率没有你想象中的那么频繁。这意味着你大部分时间做的是无用功。
你所做的性能优化是你臆想出来的。
只有当你做出可运行的项目,并且对整个项目结构了解清楚之后,知道性能瓶颈在哪,有针对性的进行优化,通常会有意想不到的收获。
何时重构:
重构可以随时进行,不一定要专门腾出时间来进行重构。(当然,你也可以这么做,前提是团队的意见是一致,并征得老板同意,说服老板重构能够改良设计不仅代码质量提高同时加快开发速度。)
但注意一定要将重构和添加功能的两种状态进行划分,在重构的时候不要添加功能。否则你不知道BUG是重构时导致还是添加功能时导致,增加重构的难度。
这两种状态可以来回切换,但不能重叠。
何时不该重构:
项目已近最后期限,因为已经没有足够的时间重构
漫谈项目设计&重构&性能优化的更多相关文章
- 项目设计&重构&性能优化
漫谈项目设计&重构&性能优化 重构的好处:重构能够改进软件设计,随着项目需求的变更,项目体积的变大早已与最初的设计大相径庭,代码结构变得凌乱.复杂,如果不进行重构,则很难添加新的功能. ...
- MySQL · 性能优化· InnoDB buffer pool flush策略漫谈
MySQL · 性能优化· InnoDB buffer pool flush策略漫谈 背景 我们知道InnoDB使用buffer pool来缓存从磁盘读取到内存的数据页.buffer pool通常由数 ...
- 一个Web报表项目的性能分析和优化实践(五):重构有助于性能优化么?
项目从初次开发到现在,已经快3年了.期间,有N个工程师参与过. 需求方面:增加减少,反反复复,无数次:人力方面:增加减少,不稳定:时间方面:功能开发着急上线,Bug开发紧急修复. 因此,代码臃肿,问题 ...
- Ext.js性能优化漫谈
Ext.js是一个用于建立企业级应用的纯JS框架.毫无疑问,它为我们提供了大量的组件,比如container,panel,field,grid,这些组件使用起来很方便,不需要去写js和html,但是e ...
- 漫谈 HTTP 性能优化
本文主要是侧重于 HTTP 的优化,对于 HTTPS 后续文章会讲. 既然要做性能优化,那么,我们就需要知道:什么是性能?它都有哪些指标,又应该如何度量,进而采取哪些手段去优化? "性能&q ...
- 【腾讯Bugly干货分享】跨平台 ListView 性能优化
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/FbiSLPxFdGqJ00WgpJ94yw 导语 精 ...
- Unity性能优化(3)-官方教程Optimizing garbage collection in Unity games翻译
本文是Unity官方教程,性能优化系列的第三篇<Optimizing garbage collection in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...
- (转) Android开发性能优化简介
作者:贺小令 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序.以上理由,足以 ...
- T- SQL性能优化详解
摘自:http://www.cnblogs.com/Shaina/archive/2012/04/22/2464576.html 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册 ...
随机推荐
- linux 建库,编码,导入数据
二.导入数据库1.首先建空数据库mysql>create database abc; 2.导入数据库方法一:(1)选择数据库mysql>use abc;(2)设置数据库编码mysql> ...
- (转)pem, cer, p12 and the pains of iOS Push Notifications encryption
转自:http://cloudfields.net/blog/ios-push-notifications-encryption/ The serious pains of setting up a ...
- SWFLoader交互
主应用程序: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx=& ...
- 如何用SVN进行个人版本管理
事实上SVN的确是我用过的最好的源码管理工具,虽然我用过的这类工具并不多,只有VSS.CVS和SVN,其它像PVCS. TeamSource.ClearCase之类的只有耳闻,因为它们都是商业产品,并 ...
- 利用JasperReport+iReport进行Web报表开发
用JasperReport+iReport进行Web报表开发 序言 在非常多实际的项目里,报表都是当中十分重要的组成部分,比如把查询结果以报表的形式呈现出来.这里所提到的报表可不是简单的二维表,而是拥 ...
- Ubuntu安装配置Qt环境
安装 QT4.8.6库+QT Creator 2.4.1 下载地址发布 QT4.8.6库 http://mirrors.hustunique.com/qt/official_releases/qt/ ...
- Python 文件I/O (转)
Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...
- linux命令帮助
Linux命令格式:command [options] [arguments]command:命令options: 参数 [] 表示是可选的;<> 表示是可变化的; x|y|z 表示只能选 ...
- NumberBox( 数值输入框) 组件
本节课重点了解 EasyUI 中 NumberBox(数值输入框)组件的使用方法,这个组件依赖于 ValidateBox(验证框)组件.一. 加载方式//class 加载方式<input typ ...
- 小学生之手(01)之 "for循环"
---恢复内容开始--- 咳咳咳!第一次要写这种东西,要是有不足的地方,请见谅!!!并且感觉在这班门弄斧是不是有点托大了.一向擅长低调的我,在’被逼无奈‘之下,要嚣张一下了......(此处省略500 ...