• 请不要在回答技术问题时复制粘贴 AI 生成的内容
szq8014
V2EX  ›  程序员

你们的项目启动时间是几秒?

  •  3
     
  •   szq8014 · Jun 22, 2021 · 15799 views
    This topic created in 1961 days ago, the information mentioned may be changed or developed.

    现在手头负责的单体项目是 15-20 秒左右, 有点影响自己的写代码节奏。。加一些启动参数能达到 10-12 秒,感觉变化不大,如果能在 5 秒内启动该多好。
    之前待过的公司也都是单体 Java 项目,启动速度慢的能达到 1 分钟, 大家现在手头的项目启动速度都是什么级别的呢? 有没有影响到你们的思维节奏?

    Supplement 1  ·  Jun 23, 2021

    补充一下,有人可能之前没想过去优化 Spring 项目的启动速度。 至少有几个启动参数是效果非常好的, 比如

    -XX:TieredStopAtLevel=1 -Xmx1024M -Xms1024m -noverify 
    

    jvm-args.png

    参考:

    https://stackoverflow.com/a/49663075

    https://github.com/dsyer/spring-boot-startup-bench

    101 replies  •  2022-07-08 21:13:39 +08:00
    1  2  
    ❮ ❯
    yitingbai
    yitingbai
    Jun 22, 2021
    1
    用到的东西多了启动肯定慢啊, 如果有条件可以把项目分成几个模块, 分别开发分别调试
    szq8014
    szq8014
    OP
    Jun 22, 2021
    2
    @yitingbai 现在也在纠结这个事,不知道服务化拆分后收益大不大
    KagurazakaNyaa
    KagurazakaNyaa
    Jun 22, 2021❤️1
    3
    拆成不同的组件,写好 CI,提交的时候自动 rolling update,这样就方便了
    pmispig
    pmispig
    Jun 22, 2021
    4
    快的 60 秒,慢的 180 秒。。。你这 15 秒超神
    peyppicp
    peyppicp
    Jun 22, 2021
    5
    golang 项目,2s
    cslive
    cslive
    Jun 22, 2021
    6
    配置垃圾,2 分钟起不起来
    szq8014
    szq8014
    OP
    Jun 22, 2021
    7
    @pmispig 那开发时间岂不是有很多浪费在了启动上?
    kwanzaa
    kwanzaa
    Jun 22, 2021
    8
    故意放慢速度来打印 log 提供仪式感,不然裸载 2s 。
    ericgui
    ericgui
    Jun 22, 2021
    9
    @szq8014 不大
    zen1
    zen1
    Jun 22, 2021
    10
    本地最少 2min+
    wwwz
    wwwz
    Jun 22, 2021
    11
    慢啊,java 用 jrebel 热部署,有的时候还是需要重启
    Tink
    Tink
    Jun 22, 2021 via Android❤️1
    12
    纠结这个感觉意义不大啊
    zzzmh
    zzzmh
    Jun 22, 2021❤️2
    13
    影响思路具体如何影响,是每次写完调试,重启项目,慢?
    感觉我不会那么频繁遇到需要重启的情况,写完一套逻辑,重启一次,一天也就十来次。
    另外解决思路很简单啊,自己买个 amd 5800h 芯的本子,刷 linux 系统,不管重启还是编译都快到赏心悦目
    simple2025
    simple2025
    Jun 22, 2021
    14
    @zzzmh 10 来此重启,我 2 分钟就用完了
    pkoukk
    pkoukk
    Jun 22, 2021
    15
    2s 左右?
    现在写 tdd,新代码 cover 的差不多了才会启项目搞集成测试,启不了几次
    wr516516
    wr516516
    Jun 22, 2021
    16
    好奇你加的什么启动参数
    szq8014
    szq8014
    OP
    Jun 22, 2021
    17
    @kwanzaa 优秀
    szq8014
    szq8014
    OP
    Jun 22, 2021
    18
    @wr516516 网上能搜到,是 SpringBoot 启动优化的

    具体参数是 `-XX:TieredStopAtLevel=1 -Xmx1024M -Xms1024m -noverify `
    reeco
    reeco
    Jun 22, 2021 via iPhone
    19
    60w 行代码,编译 5 分钟,启动 15 分钟
    L5tEU4WX072p5P42
    L5tEU4WX072p5P42
    Jun 22, 2021 via iPhone
    20
    35 分钟
    rockddd
    rockddd
    Jun 22, 2021❤️9
    21
    带薪启动,不要在意速度。正好可以去喝一杯咖啡
    janda
    janda
    Jun 22, 2021
    22
    junit 单元测试
    szq8014
    szq8014
    OP
    Jun 22, 2021
    23
    @reeco 厉害了..
    NUT
    NUT
    Jun 22, 2021
    24
    这个问题核心是在于,如何快速 debug 吧。

    想好逻辑,用 TDD 减少 debug 次数,debug 很费时间,我认为如何降低 debug 次数,比考虑项目启动优化,要有意义。 俗称 脑子跑代码。。。

    各种设计原则用一用,什么单一原则,开闭等等。

    如果对项目启动有要求,差那几秒没啥意义,现在都是容器化时代了,蓝绿红黑,随便搞搞就解决了。
    dream10201
    dream10201
    Jun 22, 2021
    25
    在主程序的第一句:print("启动成功")
    byte10
    byte10
    Jun 22, 2021
    26
    @reeco 牛到不行。我们那些狮山项目 I7-10 代表压 U 启动 45S,m1 启动 30 秒,M1 是真的无脑强。
    @peyppicp (⊙o⊙)… go 怎么那么厉害。java 是真的烂,go,nodejs,python,这些玩意是真的舒服。随时写,随时跑
    hsuvee
    hsuvee
    Jun 22, 2021
    27
    Java 曾有一个 20 分钟
    yuancoder
    yuancoder
    Jun 22, 2021
    28
    php 一秒内
    szq8014
    szq8014
    OP
    Jun 22, 2021
    29
    @ericgui 哈哈哈哈。我看你发了一个屎山的,看来经历过
    yungo8
    yungo8
    Jun 22, 2021 via Android
    30
    启动几分钟,编译十分钟……
    simple2025
    simple2025
    Jun 22, 2021
    31
    @byte10 golang 是启动快,但是写的时候想死
    xloger
    xloger
    Jun 22, 2021
    32
    Android 项目,冷启动要 2 分多钟,打一个 release 包要 6 分钟。时常吐槽说等编译的时间已经超过我 debug 的时间了。耗时分析有一半时间是在 kotlin 编译上,为此还看了下别人的优化方案: https://juejin.cn/post/6854573211548385294
    看完放弃自己优化的念头了。我需要公司配个更好的 CPU ......
    Leonard
    Leonard
    Jun 22, 2021
    33
    公司抠,电脑配置不行,慢就慢呗,反正我按点下班,慢浪费的也不是我的时间
    otakustay
    otakustay
    Jun 22, 2021
    34
    冷启动 3 分钟左右,有缓存的热启动 5 秒左右,热更新几乎秒完成
    HDMItoDP
    HDMItoDP
    Jun 22, 2021
    35
    300 多秒
    Junzhou
    Junzhou
    Jun 22, 2021
    36
    i7-7700 14s,M1 8s
    nxforce
    nxforce
    Jun 22, 2021
    37
    这个没有固定指标的吧?

    同一个项目,有人 10 核 5G 主频,64G 内存随便开。
    有人双核赛扬 8g 内存卡半天。。。
    sprite82
    sprite82
    Jun 22, 2021
    38
    i5 7500 16G 内存 启动 15s 左右,但是我一天启动次数不超过 10 次
    polo3584
    polo3584
    Jun 22, 2021
    39
    最长的时候 500 多秒,后面通过一些注释终于降到了 150 秒内。
    Greatshu
    Greatshu
    Jun 22, 2021
    40
    10 分钟,刚好够去一次厕所
    nxcdJaNnmyF9O90X
    nxcdJaNnmyF9O90X
    Jun 22, 2021
    41
    go 的编译速度快
    bghtyu
    bghtyu
    Jun 22, 2021
    42
    go 启动很快,但是编译也挺慢的
    zhanggg
    zhanggg
    Jun 22, 2021
    43
    单体还好,最多几分钟,全新起一套完整服务要超 24 小时
    hapiman
    hapiman
    Jun 22, 2021
    44
    用 Go,5 秒内启动
    crclz
    crclz
    Jun 22, 2021
    45
    C#( Asp.Net )启动速度非常快,1s
    gtx990
    gtx990
    Jun 22, 2021 via Android
    46
    Java guice
    启动倒是很快,几秒就行
    编译,docker 打包要几分钟
    inhzus
    inhzus
    Jun 22, 2021 via iPhone❤️1
    47
    项目本地启动不起来,环境上部署一下五分钟过去了。调试绝大多数靠单测,定位问题用 arthas
    ysicing
    ysicing
    Jun 22, 2021
    48
    Go 启动 2s,编译 10s 左右
    heheda11
    heheda11
    Jun 22, 2021
    49
    Python fastApi 0.1s ~
    lixingjun
    lixingjun
    Jun 22, 2021
    50
    nodejs 1.5 秒,不过这样比较似乎意义不大
    ConfusedBiscuit
    ConfusedBiscuit
    Jun 22, 2021
    51
    巨无霸 Java 项目,IDEA 导入一次 20 分钟+,启动一次 5 分钟+,打包 1.5GB
    3dwelcome
    3dwelcome
    Jun 22, 2021❤️1
    52
    @xloger "打一个 release 包要 6 分钟"

    apk 打包有一些时间是用在压缩 asset 上,apk 的本质是 zip,每个文件都是单独压缩的,如果文件没有变,可以直接复用上一次压缩结果(前提是要保留上一次的压缩包作为对比对象)

    这样速度就很快了。
    akira
    akira
    Jun 22, 2021
    53
    java 的项目啊。。分钟级别都是能接受的
    HunterPan
    HunterPan
    Jun 22, 2021 via iPhone
    54
    1 分钟内可接受,自己的项目一般 30s 内
    wdlth
    wdlth
    Jun 22, 2021
    55
    20 秒左右吧
    lzfnb
    lzfnb
    Jun 23, 2021❤️1
    56
    要那么快干啥,启动时间越长划水时间越久
    imbushuo
    imbushuo
    Jun 23, 2021
    57
    warmup 两小时……
    eudore
    eudore
    Jun 23, 2021
    58
    go 直接启动 1 秒,编译启动 5 秒内。
    xe2vherd
    xe2vherd
    Jun 23, 2021 via iPhone
    59
    春节的时候做主站的项目,编译十分钟启动十分钟。
    privil
    privil
    Jun 23, 2021
    60
    java 项目从 20 s 到 120s,话说用 openj9 启动会快很多。
    free9fw
    free9fw
    Jun 23, 2021
    61
    30w 行代码大概 85s
    szq8014
    szq8014
    OP
    Jun 23, 2021
    62
    @privil 还有这种事? 有时间试一下
    szq8014
    szq8014
    OP
    Jun 23, 2021
    63
    @gtx990 我们这里没法推广 guice,大家都不会用
    xingguang
    xingguang
    Jun 23, 2021
    64
    18 年的时候接收的一个项目还用的 webpack1,启动一次五分钟,在忍了一年以后我升级了,启动速度不到一分钟
    myd
    myd
    Jun 23, 2021
    65
    php 不需要启动
    janxin
    janxin
    Jun 23, 2021
    66
    听上去是个 Spring 项目...
    yazinnnn
    yazinnnn
    Jun 23, 2021
    67
    从打印第一行日志到处理第一个请求 1.5s,vertx+kotlin,不过这有什么意义呢....

    用 spring 的话肯定慢阿,因为 spring 慢就喷 java 烂未免也太狭隘了
    Warder
    Warder
    Jun 23, 2021
    68
    @xingguang 能忍一年,也是个 nb
    Tinyang
    Tinyang
    Jun 23, 2021
    69
    3 分钟
    wa8n
    wa8n
    Jun 23, 2021
    70
    @zzzmh #13 请问 linux 系统有推荐的吗?
    chainchan
    chainchan
    Jun 23, 2021
    71
    20 分钟
    byte10
    byte10
    Jun 23, 2021
    72
    @chenqh 我觉得 nodejs 写起来方便,写的外包项目,写的小工具,go 也不错啊,可以编译成可执行文件,也是很舒服的,写点小工具方便,安卓,macos,ios 那些都可以直接跑
    wr516516
    wr516516
    Jun 23, 2021
    73
    @szq8014 多谢分享,又学到之前不了解的知识
    Cbdy
    Cbdy
    Jun 23, 2021 via Android
    74
    秒级
    zzzmh
    zzzmh
    Jun 23, 2021
    75
    @wangsongyan 看水平,我是半吊子,我就省心用 ubuntu,因为新版 amd 的核显驱动老出问题,就 ubuntu+5.10 内核最省心。。。否则我可能会首选 deepin,因为 deepin 带的微信什么的至少是调试好的,可以免去我自己调试。。。。然后如果是大佬,推荐 arch debian fedora manjaro,这种我只敢在虚拟机里玩,笔记本玩过一次 manjaro,从入门到重装系统,只花了一个月
    HannibaI
    HannibaI
    Jun 23, 2021
    76
    150w 行 C++,编译 5 分钟,启动 4-5s 吧
    zael
    zael
    Jun 23, 2021 via iPhone
    77
    @pkoukk 什么是 tdd
    xiluo
    xiluo
    Jun 23, 2021
    78
    尝试换到 Graalvm 试试呢,启动速度提高 50 倍
    luckyc
    luckyc
    Jun 23, 2021
    79
    python flask
    <1s
    thetbw
    thetbw
    Jun 23, 2021
    80
    大概 27 分钟吧
    thetbw
    thetbw
    Jun 23, 2021
    81
    @thetbw 补充一下 ,java,spring,之前在处理依赖的时候堆栈溢出过几次
    x940727
    x940727
    Jun 23, 2021
    82
    @byte10 Go 的编译期没有任何优化的,而且 Go 的语法对编译器更友好……Java 也有不优化的编译器,AOT 的速度其实也勉勉强强,主要有反射会影响静态编译。
    szq8014
    szq8014
    OP
    Jun 23, 2021
    83
    @byte10 Java 也可以随时写随时跑, 想写启动快的 Java 可以尝试 quarkus, 你要有勇于离开 Spring 的魄力才行, 当然现在 spring native 也在迭代中。
    chihiro2014
    chihiro2014
    Jun 23, 2021
    84
    140s-200s 左右?
    wanguorui123
    wanguorui123
    Jun 23, 2021
    85
    秒起
    3dwelcome
    3dwelcome
    Jun 23, 2021
    86
    我其实挺好奇 chrome 开发组是怎么缩短启动时间的,我自己编译浏览器,一般启动至少要 5 分钟以上。

    因为 C++必须把无数.obj 文件链接成一个 exe,对于 chrome 这种巨无霸体量,这一步特别的费时间。

    然后我搜了一下谷歌,还真有 chrome.dll 编译优化,blog.llvm.org/2018/01/improving-link-time-on-windows-with.html 。

    诀窍就是换编译器,一开始是 MSVC,编译 chrome.dll 用时 507.17s 。换了 CLang 之后 34.76s ,10 倍速度提升。
    sunnywx
    sunnywx
    Jun 23, 2021
    87
    前台 war,在服务器上大概 5 分钟,😂
    FlexGap
    FlexGap
    Jun 23, 2021
    88
    golang 的项目,大概七八秒钟
    MithrilCookie
    MithrilCookie
    Jun 23, 2021
    89
    借楼问一下,生产环境 PASS(公司自建 PASS)下容器的启动速度远远比不上开发机(本人用 m1 mac),这种情况正常吗? SpringBoot 的单体应用,本地十几秒,生产上两三分钟(容器是 4 核 8g 的),感觉跟树莓派是一个级别的
    ylsc633
    ylsc633
    Jun 23, 2021
    90
    作为一个刚刚从 Golang 转到 java 的开发者来说

    java 一启动.. 真的慢

    问题是 java 项目是个新写的项目 代码估计就几万行吧
    ychost
    ychost
    Jun 23, 2021
    91
    5 分钟
    mreasonyang
    mreasonyang
    Jun 24, 2021 via iPhone
    92
    怎么定义启动速度快慢呢?是以 JVM 完成启动和初始编译为准,还是以服务 ready 可供调用为准?如果是前者,那可以考虑楼上的建议。如果是后者,那么只要是用了连接池的项目都不会快,同时这种情况下与长尾的建连相比,JVM 相关的启动耗时可以忽略不计了
    Ailoli
    Ailoli
    Jun 24, 2021
    93
    vue 1 分钟+-
    johnniang
    johnniang
    Jun 24, 2021 via Android
    94
    yizmaoaa
    yizmaoaa
    Jun 24, 2021
    95
    Quarkus 2 秒。楼上有人提 Spring Native 。应用场景不一样。Graalvm 打包后的 native-image 是秒起,但是打包速度是很慢的。用都没用过的东西就别瞎推荐了-
    telan233
    telan233
    Jun 24, 2021
    96
    java 编译+启动 4 分钟
    samin
    samin
    Jun 24, 2021
    97
    @pkoukk 请问贵司是多大规模的厂子 ? 我们团队最近也在想着进军 TDD,就拿这调试来说就已经是个非常大的优势,交流下经验
    laobodslr
    laobodslr
    Jun 25, 2021
    98
    200S 左右
    starxg
    starxg
    Jun 29, 2021❤️1
    99
    启动时加上-Dspring.main.lazy-initialization=true 或者在配置文件里加上这句话。

    开启全局懒加载,启动速度非常快!

    但是快也是有代价的,参考这里: https://blog.csdn.net/peterwanghao/article/details/95617046
    Dreamerwwr
    Dreamerwwr
    Jul 8, 2022
    100
    @polo3584 用的什么注释?
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2446 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 340ms · UTC 15:19 · PVG 23:19 · LAX 07:19 · JFK 10:19
    ♥ Do have faith in what you're doing.