从重构到吐血 - 我是如何删掉 6 万行代码并且不删减原有功能的

2017-12-10 16:42:44 +08:00
 pupboss

原文发表在我的博客 近期重构工作的一点收获

主要重构工作如下

关于删除代码,在某个项目里,Pods 文件夹那些第三方库的代码删了 9 万多行(那个目录没有被 git ignore 掉),项目里面删除了大约 4 万行,其中大量代码是该项目之前的项目里面留下来的东西,只不过没人清理。在删了 4 万行之后,程序仍然能完整的跑。

接下来是做了部分重构,把一些第三方库删掉,自己造轮子,在这个过程中,累计删除了 1.2 万行代码,增加了 1100 行左右。

整个重构工作下来,编译速度从 2-3 分钟减小到了 40 多秒( 13 寸 2 核心机器),warning 从 70 多减少到了 0,第三方库的数量从 51 个减少到了 13 个,安装包从 22.1M 减小到了 3.7M ,功能反而比之前还要多。

原文发表在我的博客 近期重构工作的一点收获

10581 次点击
所在节点    程序员
80 条回复
pupboss
2017-12-11 10:03:18 +08:00
@eddiechen 这个文章记录的是两个月以前的重构,那个时候 Xcode 还没升级呢,目前的那些 block void 检查,我是把能删掉的库都删掉,删不掉的只好留着 warning 了,MJExtension 引入进来的比较多,其他的一共在 3 个左右,一些小的年久失修的库我会把他的源码直接放到项目里,不用 Pod
pupboss
2017-12-11 10:04:41 +08:00
@mritd 不要这么拆穿嘛,就是想蹭个热度
HelloiWorld
2017-12-11 10:05:41 +08:00
顺便使用 LSUnusedResources 项目清除了 无用的图片资源,个人感觉整个项目清爽了不少(其实是更贴合了自己的开发习惯 😄)
pupboss
2017-12-11 10:07:50 +08:00
@fenglangjuxu 大公司的还是不要重构了😂我之前在扇贝单词,有些旧代码也很不友好,但是看了看我放弃了重构。这个项目很小,所以重构起来,勉强能搞定

@xrlin 对的....我也做过一点点后端的开发,改起来心惊胆战的,贼鸡儿刺激

@HelloiWorld 握爪。。从重构到放弃
cnanyi
2017-12-11 10:08:34 +08:00
曾经在上家公司重构过一个软件的后台, 大概删除了 80%的代码, 并不影响使用, 被删掉的部分是主要是产品经理为了软件的前瞻性设计的功能, 大部分是开发了一半逻辑走不通就不管了, 还有一部分是为了让后台操作界面更炫而设计的样式和动画, 运营同事经常在操作数据时要各种等待界面渲染完成而抱怨系统太慢, 能不能优化, 有时也因为在复杂的菜单项目找到一个功能入口而头疼。
后来我终于离开了
eddiechen
2017-12-11 10:14:32 +08:00
好吧,看来 pod 引入 warnings 这个还是没啥好办法解决
SunnyCoffee
2017-12-11 10:16:32 +08:00
我手头也有这样的一个项目,之前是外包做的。没算第三方库,删了也差不多有 1w 行代码了
pupboss
2017-12-11 10:18:09 +08:00
@HelloiWorld 这个肯定要做的,哈哈

@cnanyi 其实我们也有这类代码。。。开发的时候以为用得上,结果写完没集成进去。大的项目无力回天,还是离开比较好😂

@eddiechen 我试过 Pods 提供的一些和 warning 相关的设置,都没用,或许我们可以给开源库提 PR 来修复这个,强迫症看见警告确实不能忍
pupboss
2017-12-11 10:41:21 +08:00
@SunnyCoffee 都有一个共性,就是之前更早项目的代码,不管用不用得上,先拖进去再说
hujianxin
2017-12-11 10:47:28 +08:00
厉害了!!
RubyJack
2017-12-11 11:04:26 +08:00
重构先写测试...
hantsy
2017-12-11 11:13:00 +08:00
@likuku 非常欣慰,能够看到一些写测试的同学。

可惜我工作十几年,国内没遇到一个公司硬性要求测试。

几年前还在最后一家不小的公司上班时,曾经想全公司推广单元测试,结果遇到开发人员一致反对,公司决策层不得不放弃。大部分公司还是习惯人肉 Debug,然后天天和测试组扯皮,或者一个人提交代码把所有人的功能都捅破了,然后全公司加班去修复,还在埋怨公司没人性。

还好离开公司后,现在 Freelancing,写测试已经成为习惯。不写测试的项目不会参与,不写测试的团队不会加入,实在没法忍受烂泥一样没测试的代码。
assad
2017-12-11 12:05:39 +08:00
6 万行有多少是复制粘贴出来的?
pupboss
2017-12-11 12:31:47 +08:00
@RubyJack @hantsy 多谢指教,单元测试是必不可少的

@assad 复制的代码是一部分,更多的是更旧项目留下来的用不到的,直接放到项目里的库,和代码文件
RubyJack
2017-12-11 12:58:35 +08:00
@hantsy @likuku @pupboss ,我也是重构我司 Rails 写的后端服务到吐血,不过自从看完了《重构》,掌握一些套路就轻松很多了
hantsy
2017-12-11 15:17:04 +08:00
@RubyJack Refactoring,Junit in action (第一版) 我很早就买了。
@pupboss 看了上面很多认为重构是为了清理遗留项目。

其实对于新开发的项目而言,重构也应该贯穿整个项目开发过程。新项目架构应该一般认为不会被技术债务所困扰,但 API 设计一开始要做到尽善尽美很难,不断完善的过程也需要不断的重构代码。在每个 Sprint 中应该清理掉哪些无用的代码,对于一些业务重新实现代替了某些已有代码,标记(@Deprecated )提示调用方(其他开发人员)他们在将来会被删除,并可以使用新的方法替代。
pupboss
2017-12-11 16:23:43 +08:00
@hantsy Deprecated 这点确实很有用,目前我们还都是一刀切,多谢您的见解
minininja
2017-12-11 18:15:21 +08:00
听说重构都是大神才能干的活,摩拜楼主。
sagaxu
2017-12-11 18:23:38 +08:00
之前把一个后端项目从 Java 重构到了 Kotlin,删除了一半以上代码,性能还 double 了一下。还好不是动态类型语言,重构会死人的
v2ewonder
2017-12-12 11:07:32 +08:00
之前,同事离职了,接手了他的项目。
代码那个恶心啊,然后我吐槽了。那位同事来了一句:删了重写啊。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/413522

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX