V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ufo22940268
V2EX  ›  程序员

大家能够忍受的编译时间是多久

  •  
  •   ufo22940268 ·
    ufo22940268 · 2013-03-16 07:37:27 +08:00 · 10228 次点击
    这是一个创建于 4268 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前做了2年的android-porting, 因为是编译framework,所以需要的时间非常久,我就放在服务器上编译。所以就变成改一次代码,编译+部署差不多花了我40秒。

    现在在新公司,做android app开发,没有服务器,公司不提供电脑(说转正之后再给我配)。所以我只能天天带着我的乞丐版mac air 11“去上班,结果编译还是花费了我30秒钟时间。总觉得接受不了,对于我这种稍微改一下代码或者junit test就编译一次的人来说。
    结果昨天看了下同事编译和我同等规模的ios app,居然只要10秒钟!虽说他电脑比我好吧,不过总不至于相差这么多。
    51 条回复    2016-07-06 14:34:05 +08:00
    cassyfar
        1
    cassyfar  
       2013-03-16 07:47:22 +08:00
    40s长吗...
    编译的时候正好偷个懒什么的,多好
    vibbow
        2
    vibbow  
       2013-03-16 07:49:25 +08:00
    取决于干嘛了。

    我们公司的项目,编译一次要20分钟。
    更不用说完整的JUnit Test一次了,从来没白天跑过,都是晚上自动跑的。

    反正编译是一个考验整机性能的活,除了显卡。
    ufo22940268
        3
    ufo22940268  
    OP
       2013-03-16 07:51:54 +08:00   ❤️ 1
    @cassyfar 原来我也是这么想的,然而实际上在编译的时候我想想那个想想这个,然后编完之后有时候就会忘了自己刚刚编译的原因是什么。
    ufo22940268
        4
    ufo22940268  
    OP
       2013-03-16 07:54:42 +08:00
    @vibbow 兄弟,可不可以跑题问一个关于JUnit的问题.
    我现在开发的是一个客户端的app,它就是解析一下服务器的json,然后显示一下就这么简单。
    可是问题是我写JUnit Test的时候直接取真实的服务器端的数据进行测试,这样子对吗?
    还是说我应该把服务器端返回的json给mock起来?
    vibbow
        5
    vibbow  
       2013-03-16 08:08:59 +08:00
    @ufo22940268 这个不是很清楚了。
    我们公司的产品架构是JAVA, JSP, XML, XSL。
    我们的JUnit测试就是两个方面:
    1. JUnit调用selenium,然后在Firefox里自动测试网页流程,只要捕捉到了关键字就算通过。
    2. 用XSL渲染XML数据,只要没有出错,就算通过。

    取真实的数据没问题,只要你有方法能验证这个数据是正确的就行了。
    vibbow
        6
    vibbow  
       2013-03-16 08:14:48 +08:00
    @ufo22940268 取真实的数据有时更能发现隐藏的错误。比如说特殊字符处理,或者来源数据如果错误怎么办之类的问题。
    不过记得保存测试日志。
    我们测试时所有的数据全部都保存(tomcat日志,远程服务器返回的日志,xsl渲染出来的数据,以及出错时屏幕截图等等),这样出错时才好找问题出在哪里。
    ufo22940268
        7
    ufo22940268  
    OP
       2013-03-16 08:24:26 +08:00
    @vibbow 我本来也是这么想的。不过开发了一段时间后发现服务器端的数据有的时候居然会变化(有的时候是因为服务器自己的问题引起),所以我的测试用例有的时候就变成帮服务器测bug的工具了。总之有的时候因为服务器数据变化导致我改测试用例这件事情让我感觉有点不爽。
    zhujinliang
        8
    zhujinliang  
       2013-03-16 08:24:28 +08:00
    10到20分钟吧,既有成就感,还又不太浪费时间,正好喝杯茶,上个厕所神马的
    SkyFvcker
        9
    SkyFvcker  
       2013-03-16 08:29:41 +08:00   ❤️ 1
    Gentoo用户表示对编译时间很有耐受力~~~~
    vibbow
        10
    vibbow  
       2013-03-16 08:57:20 +08:00
    @ufo22940268 我们公司产品的中间件有些奇葩,有这么一个选项:
    如果没有在一段时间内从远程获取到数据,那么就自己伪造一个输出给前端。
    当然也是产品功能之一,有时候客户不需要用在线数据,就可以用离线数据。
    Mutoo
        11
    Mutoo  
       2013-03-16 09:32:05 +08:00
    带薪编译。
    sumu
        12
    sumu  
       2013-03-16 09:41:11 +08:00
    当你加入一个团队之后发现团队要求每次做新功能要单独拉分支,而新分支编译要2个小时以上。。。。。,当开发完之后合并到主干,再次拉一个分支,同样是2个小时,so,少年,几十秒的编译时间,浮云啊,如果工程简单,来个make -j能少等一会儿
    clowwindy
        13
    clowwindy  
       2013-03-16 09:49:59 +08:00   ❤️ 1
    想清楚了,写好了,检查一下,再运行。
    xdeng
        14
    xdeng  
       2013-03-16 09:54:58 +08:00
    linux内核更久
    ufo22940268
        15
    ufo22940268  
    OP
       2013-03-16 09:56:15 +08:00
    @clowwindy 这个答案很靠谱,而且我也努力向这个方向努力。
    jerommix
        16
    jerommix  
       2013-03-16 10:03:15 +08:00
    试过Android系统编译么?

    1.单机篇
    -cache
    -j{n}

    2.多机编译
    alexrezit
        17
    alexrezit  
       2013-03-16 10:07:53 +08:00   ❤️ 1
    不然你以为 unit test 是干嘛的咧~
    ufo22940268
        18
    ufo22940268  
    OP
       2013-03-16 10:51:48 +08:00
    @jerommix 以前android-porting的时候用过ccache和-j,但是现在用ant编译了,待会儿去看看ant可不可以多线程编译。
    fangzhzh
        19
    fangzhzh  
       2013-03-16 10:55:58 +08:00
    没人吐槽不给配电脑的事实吗?

    要是lz没有电脑可带, 那么lz试用期练 坐禅神功吗?
    ufo22940268
        20
    ufo22940268  
    OP
       2013-03-16 11:03:49 +08:00
    @fangzhzh 创业公司,没办法。如果没电脑的话会给一台过时的小黑,我还宁愿要小黑呢,可以装个自己喜欢的linux发行版。
    pyKun
        21
    pyKun  
       2013-03-16 11:53:13 +08:00
    @fangzhzh
    我们公司配1500的清华同方~
    kofj
        22
    kofj  
       2013-03-16 13:23:55 +08:00
    自己坚持编译完一次LFS你就会发现之前的编译时间都是小case~哈哈哈哈
    fangzhzh
        23
    fangzhzh  
       2013-03-16 13:30:44 +08:00
    @pyKun 呃,其实这样不好. 真的, 员工心情也不好, 工作效率也不高, 恶性循环
    shaobin0604
        24
    shaobin0604  
       2013-03-16 13:34:29 +08:00
    @sumu 莫非是企鹅
    66450146
        25
    66450146  
       2013-03-16 14:36:00 +08:00
    我们的 iOS app 编译一次要十几分钟
    zx900930
        26
    zx900930  
       2013-03-16 14:43:05 +08:00
    我能忍受的极限是48小时
    ufo22940268
        27
    ufo22940268  
    OP
       2013-03-16 14:49:32 +08:00
    @66450146 游戏开发吗?
    66450146
        28
    66450146  
       2013-03-16 15:41:24 +08:00
    @ufo22940268 不是的
    molinxx
        29
    molinxx  
       2013-03-16 15:45:30 +08:00
    make -j*不超过20分钟就能忍受~
    pyKun
        30
    pyKun  
       2013-03-16 17:09:38 +08:00
    @fangzhzh 还想吐槽一下,我们公司组织踢球嘛,租个场地2个小时那样的;主要是陪老板踢,然后租场地这钱是大伙AA的~每次都交几十点几几这样的~~ 不知道还有人和我一样么
    JimmyZ
        31
    JimmyZ  
       2013-03-16 17:13:27 +08:00
    fangzhzh
        32
    fangzhzh  
       2013-03-16 18:15:33 +08:00
    @pyKun 这种状况必然不去. 你是去工作的,又不是去装孙子的.

    话说, 我们公司年会我一次都没有去过....
    周年庆,各种奖品,各种抽奖, 必然请假, 不耽搁工作内容,也可以趁机在家休息下

    道不同,不相为谋.

    好公司就当自己家, 活动即使无趣,也要捧场; 好的工作伙伴就当哥们, 过年回家都想着发祝福短信.
    烂公司那就是打工的地方, 我出工,你给钱; 不要祈求更多. 公司对员工时就是资本家和工人关系; 轮到了员工对公司就成了无私奉献了,那不是人格分裂吗?
    fangzhzh
        33
    fangzhzh  
       2013-03-16 18:18:00 +08:00
    "@clowwindy 想清楚了,写好了,检查一下,再运行。"
    这是大牛,真的. 这个建议只有懂得,才知道有多中肯,重要
    pyKun
        34
    pyKun  
       2013-03-16 18:35:45 +08:00
    @fangzhzh
    必须啊,早看透了
    好在能力该锻炼锻炼了,没有什么遗憾了
    wenbinwu
        35
    wenbinwu  
       2013-03-16 18:41:30 +08:00
    几十秒很好了吧
    Leo
        36
    Leo  
       2013-03-16 18:43:02 +08:00
    一直很羡慕你们能有40s伸个懒腰
    huangzxx
        37
    huangzxx  
       2013-03-16 18:59:02 +08:00
    ccache 和 distcc。不知道对 lz 有没有帮助。
    chuangbo
        38
    chuangbo  
       2013-03-16 21:40:41 +08:00
    装 Gentoo 要一个星期啊!
    min
        39
    min  
       2013-03-16 22:49:23 +08:00
    在sh3 cpu上装过gentoo的飘过
    bytelee
        40
    bytelee  
       2013-03-16 23:26:04 +08:00
    上大学的时候,实验室里,用虚拟机编译linux内核。等过2个小时
    saharabear
        41
    saharabear  
       2013-03-16 23:34:31 +08:00
    我在FreeBSD上编译KDE4.7,用的是一台不能再老的机器,我编译了两天半,报了个错。
    xuan_lengyue
        42
    xuan_lengyue  
       2013-03-16 23:35:48 +08:00
    我自己写的iOS App,光是编译就得5分钟。。。
    每次客户要改需求,最后打成ipa给他,简直就是杯具。
    Mooooon
        43
    Mooooon  
       2013-03-16 23:50:42 +08:00 via Android
    锅做android驱动,改一次就要编次内核,编次内核视平台不同大5-15分钟吧。android全编1个半小时到两小时。
    ufo22940268
        44
    ufo22940268  
    OP
       2013-03-17 07:53:07 +08:00
    @saharabear 这个真搞
    rebolomo
        45
    rebolomo  
       2013-03-17 10:06:00 +08:00
    以前也是做porting项目,编译个游戏要花差不多1个小时,后来带我们的大哥级程序员发现个技巧,用一个.h文件把好多个cpp文件include进来,可以加快编译,十几分钟就编译好了。
    luikore
        46
    luikore  
       2013-03-17 10:33:31 +08:00
    @rebolomo ... 不就是 stdafx / prefix.pch 吗, 几十年前就有了...
    rebolomo
        47
    rebolomo  
       2013-03-17 11:05:34 +08:00
    @luikore 不一样,那个是把所有的header包进来,把cpp放到一个header里面include,好像是所有的cpp的内容会变成一个大的cpp,比每次编译一个cpp要快,所以工程里那些单独的cpp也不放进去,只放一个.h,里面是一行一行的cpp文件名
    shikailun
        48
    shikailun  
       2013-03-17 13:54:51 +08:00
    曾经二次开发chrome,,第一次编译了8个小时。。。后来每次也需要2小时。。
    oldcai
        49
    oldcai  
       2013-04-25 11:16:03 +08:00
    看了上面,发现QT静态编译,3个多小时,都不算个事了。
    cppgohan
        50
    cppgohan  
       2016-07-06 14:16:44 +08:00
    想知道 lz 以前做 Android Framework 开发, 每次改动 40s 后提交服务器, 服务器编译过程用的是什么 CI 系统? 反馈要多久啊?

    以前做 win 下的应用开发, vs 的工程, 大的项目可以用分布式编译的解决方案, Android 构建的这套流程似乎没见到类似的.
    ufo22940268
        51
    ufo22940268  
    OP
       2016-07-06 14:34:05 +08:00
    @cppgohan

    我就不说以前是怎么做的了,因为之前用的是 crontab ,反正也不是我搭的,没什么好丢人。

    针对的你的问题,我觉得 jenkins 就足够能够满足`分布式编译`的要求。因为 jenkins 里面可以添加多个 node ,并行执行任务。想 twrp 之类的项目就是用 jenkins 完成分布式编译的。链接: https://jenkins.twrp.me/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2926 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:28 · PVG 22:28 · LAX 06:28 · JFK 09:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.