从重构到吐血 - 我是如何删掉 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 ,功能反而比之前还要多。

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

10396 次点击
所在节点    程序员
80 条回复
pupboss
2017-12-10 23:07:06 +08:00
@jhdxr 哇这么能遇到,师兄好,系统里登记的我是在 DMAL,实际上一般都在 Innovation Center
pupboss
2017-12-10 23:08:52 +08:00
@jhdxr RA 是当时用交换生身份过来的,PO 是毕业之后转的,其实从待遇上看不是降级😂
oswuhan
2017-12-10 23:19:18 +08:00
@forestyuan 哈哈
cnTangLang
2017-12-10 23:25:23 +08:00
重构最痛苦的,不一定是程序员,极大可能是测试。
pupboss
2017-12-10 23:32:01 +08:00
@cnTangLang 我们公司没测试,我自己就是测试😷
beimenjun
2017-12-10 23:41:06 +08:00
其实 YYText 应该还是蛮稳定的,如果有大量 Crash,必须认真查下根本原因了。
z1s23
2017-12-10 23:51:45 +08:00
请问楼主是忙里偷闲来进行重构的吗?
以前做项目,进度很赶,感觉都没时间做代码重构,但是觉得这个重构还蛮有必要!
pupboss
2017-12-11 00:13:21 +08:00
@beimenjun 正文里好像有点诋毁 YYText 了,我不是这个意思啊希望不要误会,当时的情况是活动现场几千人下载,Fabric 统计到了 iOS9 设备上面百分之百 crash,调用栈是 YYText 有一个函数,可能是旧系统不兼容,因为那个功能本来就是打算用 attributedStringWithAttachment 写的,就没细查 YYText 的具体原因,我给 YYText 的作者道个歉,写博客的时候没想那么多
pupboss
2017-12-11 00:15:17 +08:00
@zs8861 忙里偷闲也有,然后就是把产品提出来的需求 delay 了😂借口就是不重构完成,新需求没法开发。因为我们是初创团队,用户数量等同于没有,这些方面比较好协商
likuku
2017-12-11 00:28:40 +08:00
@pupboss 是的,当用上单元测试后,才发觉之前一遍一遍自己手工肉测实在太傻...

简单举个例子,使用某语言自带 /第三方提供 单元测试库 /框架 来单独写一个 /一组专用的测试程序,

里面可以写测试用函数 /方法 /类 ,它们再去引用 /调用 你正式代码 /dev 分支代码 里各个功能函数 /方法 ,自己设定给的运行参数等等,还有预计 /设计好的运行结果,让单元测试程序自己比对运行结果是否符合设计,最后给出运行结果(是否通过测试 /报错)
pupboss
2017-12-11 08:58:00 +08:00
@likuku 原来如此,受教了😀
ljsh0102
2017-12-11 09:20:07 +08:00
牛逼
dangge
2017-12-11 09:22:00 +08:00
比如布局全部用 AutoLayout,基本上不会出问题。

曾经的安卓开发表示羡慕。。。
qsnow6
2017-12-11 09:34:01 +08:00
@likuku 这不是 unittest 吗
pupboss
2017-12-11 09:41:56 +08:00
@qsnow6 客户端开发应该还要集成 UITest 的,这个也要好好研究下了

@dangge 在 AutoLayout 出来之前我是很羡慕安卓开发者的。。。可以很方便的适配各种尺寸的安卓手机
eddiechen
2017-12-11 09:46:33 +08:00
warnings 为 0 是怎么做到的,一些第三方库自带大量 warnings,特别 xcode 版本升级后
mritd
2017-12-11 09:48:12 +08:00
日常月经贴

看我如何 xxxx
我是如何 xxxx
对 xxxx 怎么看
fenglangjuxu
2017-12-11 09:57:07 +08:00
我也遇到过这种情况,代码用的都是别人的项目给改的,然后一堆遗留,好多没用的都在,强迫症看着就不舒服.
xrlin
2017-12-11 10:00:09 +08:00
服务端代码,没有完善的单元测试根本不敢大规模重构 T_T
HelloiWorld
2017-12-11 10:02:36 +08:00
import 这种深度耦合是真的烦,一层一层的引用,想明白用途的时候发现很多都没用到,处理起来也特麻烦,至今项目里也有这么一些类懒得动,简单处理过一次也就少了几 M,然后在一次又一次的迭代中又加回来了(主要是偷懒用 sb 和 xib 画的界面,相对是比纯代码大一点)

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

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

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

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

© 2021 V2EX