软件优化的原则 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
metrxqin
V2EX    程序员

软件优化的原则

  •  
  •   metrxqin 2018-08-27 10:07:50 +08:00 3910 次点击
    这是一个创建于 2603 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请问如何权衡优化的收益和成本?

    什么时候该优化? 什么时候不该优化?

    26 条回复    2018-08-28 08:26:15 +08:00
    liu233
        1
    liu233  
       2018-08-27 10:17:16 +08:00
    我司的原则就是做出来就好,优化个锤子。
    但是我的东西一般有时间就瞎捣鼓捣鼓。
    4u1kto
        2
    4u1kto  
       2018-08-27 10:21:17 +08:00
    楼下极有可能会有推这本书的《重构 改善既有代码的设计》
    zqyisasd
        3
    zqyisasd  
       2018-08-27 10:32:02 +08:00
    楼上说的对
    4u1kto
        4
    4u1kto  
       2018-08-27 10:37:28 +08:00
    但是我水平比较次,这本书对我没用
    metrxqin
        5
    metrxqin  
    OP
       2018-08-27 12:22:22 +08:00
    @4u1kto 我看过这本书,它比较侧重局部、小规模的重构,但我需要的是软件设计上的优化启发式原则。就比如缓存系统,什么时候应该引入缓存,什么应该缓存,什么不应该缓存。
    MeteorCat
        6
    MeteorCat  
       2018-08-27 12:27:12 +08:00 via Android
    先把功能实现,前期过度的优化是崩溃的开始(把后期的优化应用到前期上,堵死了后期的优化)
    jpmorn
        7
    jpmorn  
       2018-08-27 12:41:38 +08:00
    4u1kto
        8
    4u1kto  
       2018-08-27 12:46:02 +08:00
    @metrxqin 不立足于业务谈设计都是空中楼阁,满足需求的情况下提升性能才是软件设计的最终目标。

    架构不就是坑趟多了嘛。
    AllOfMe
        9
    AllOfMe  
       2018-08-27 13:00:58 +08:00
    目的非常明确了而且很有必要,才开始优化。否则最开始乱优化,反而会导致问题的复杂度加大
    FrailLove
        10
    FrailLove  
       2018-08-27 13:14:07 +08:00
    找到关键点来优化 你把一个半夜运行的定时任务从 3 小时优化到 1 小时并没有什么卵用 把用户点击按钮从 3 秒优化到 1 秒意义就很大
    weizhen199
        11
    weizhen199  
       2018-08-27 13:22:28 +08:00
    给多少钱(工时)优化多少
    Rizio
        12
    Rizio  
       2018-08-27 14:31:03 +08:00
    面向 money 优化
    szq8014
        13
    szq8014  
       2018-08-27 14:31:55 +08:00
    闲得没事干的时候或者性能到瓶颈的时候
    metrxqin
        14
    metrxqin  
    OP
       2018-08-27 15:08:27 +08:00
    也就是说,不得不优化的时候才优化。
    feng1234
        15
    feng1234  
       2018-08-27 15:16:00 +08:00
    难道不是从 sleep ( 60 )更改为 sleep ( 30 )嘛,手动斜眼
    jswh
        16
    jswh  
       2018-08-27 15:26:32 +08:00
    @metrxqin 你的这个问题其实是一个很经验化的问题,也就是要 case by case 的问题。这种优化很多时候是一种取舍,所以很难说一定做什么,一定不做什么。比如缓存的引入,一定会增加系统的复杂度,何时刷新缓存,如何刷新缓存,缓存数据和落地数据更新读取顺序等等问题,大多时候都要具体情况具体分析,很少能一概而论。

    感觉这个是一个软件工程的问题,没有上过这个方面的课程,仅仅经验之谈。
    wysnylc
        17
    wysnylc  
       2018-08-27 16:01:28 +08:00
    先业务,再谈性能
    nutting
        18
    nutting  
       2018-08-27 16:53:24 +08:00
    先多 sleep 一会儿,客户要求的时候就好做了
    rockyou12
        19
    rockyou12  
       2018-08-27 17:05:29 +08:00
    没有性能问题,就不要优化。

    其实可以很简单的考虑,不管是谁写,代码写得越多,错得越多,所以首先代码越少,bug 就越少。优化什么的除非开始就可以预见会有性能问题,不然就不要考虑。
    scmod
        20
    scmod  
       2018-08-27 17:13:03 +08:00
    先实现功能吧,免得需求变来变去最后白搞,一般加上 TODO:之类的以后有必要时候提示下自己就好了
    shangshicc
        21
    shangshicc  
       2018-08-27 18:07:28 +08:00   1
    1.实现功能,最基本的要做到不要有重复代码
    2.是否做性能优化要看是否有性能瓶颈,是否做代码的结构优化主要看你是否对于当前的代码足够满意,或者说你自己能不能看懂,有没有觉得维护性好,如果每次添加新功能时觉得整体设计不合理的话就要修改设计。
    noNOno
        22
    noNOno  
       2018-08-27 18:29:57 +08:00
    lotmany
        23
    lotmany  
       2018-08-27 18:43:21 +08:00 via iPhone
    我所接触到的优化
    先加带宽 - 换 SSD - 内存翻倍 - 加个服务器负载
    还不行 上面再来一遍
    lance7in
        24
    lance7in  
       2018-08-27 19:28:49 +08:00
    看工资
    30K 就做 30K 级别的优化
    80K 就做 80K 级别的优化
    xuanbg
        25
    xuanbg  
       2018-08-28 07:36:47 +08:00
    先实现功能,然后有时间就优化,没时间就挤出时间来优化。

    只有通过优化代码,才能让自己的能力不断提高。
    hanxiV2EX
        26
    hanxiV2EX  
       2018-08-28 08:26:15 +08:00 via Android
    优化?不可能的,最多把代码整好看点
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2558 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 05:01 PVG 13:01 LAX 22:01 JFK 01:01
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86