Gradle 编译速度提升 70%!怎么做到的?
原文鏈接
之前我司每個(gè) Java 應(yīng)用部署到預(yù)發(fā)都要等待漫長(zhǎng)的編譯打包時(shí)間,非常地痛苦!大項(xiàng)目編譯時(shí)間常常達(dá)到接近 10 分鐘,生命短暫啊,人生有多少個(gè) 10 分鐘可以等待,于是我們的效能團(tuán)隊(duì)針對(duì)編譯作了一些優(yōu)化,提速非常明顯,對(duì)某個(gè)應(yīng)用的測(cè)試來(lái)看,編譯時(shí)間從 160 s 縮短到了 50 s 左右,提升近 70%,大家紛紛點(diǎn)贊,那么效能團(tuán)隊(duì)做了哪些措施來(lái)讓編譯速度提升這么明顯呢?
首先要說(shuō)的是我們用的 Gradle 來(lái)作為我們的構(gòu)建工具,所以主要是針對(duì) Gradle 的命令來(lái)作了一些優(yōu)化。
1、修改 gradle build 的參數(shù)
- 使用 --build-cache
什么是 build cache(構(gòu)建緩存),在 Gradle 中,每一個(gè)待編譯的工程叫 Project,每一個(gè) Project 在構(gòu)建時(shí)都包含一系列的 task。
每個(gè) task 的輸入都可以作為下一個(gè) task 的輸出,build cache 做的事就是把可以緩存(注:并不是所有的 task 輸出都能緩存)的 task 輸出都緩存住,這樣在構(gòu)建過(guò)程中,如果發(fā)現(xiàn)這個(gè) task 的輸入不變,就沒(méi)必要重新執(zhí)行任務(wù)了,直接從 task ouput 緩存里拿即可,如下圖示,Build 2 的構(gòu)建輸入直接從 Build Cache 中拿,這樣 Build 1 就不用構(gòu)建了。
效果怎么樣呢,看下圖,下面圖分別顯示了 Gradle 持續(xù)集成時(shí)使用構(gòu)建緩存和不使用構(gòu)建緩存兩種情況下的聚合的構(gòu)建時(shí)間,可以看到使用了 cache 的 Gradle 構(gòu)建速度明顯快于不使用 cache 的情況。
更騷的是這個(gè) Buiid Cache 支持分布式的,可以統(tǒng)一把這些 cache 丟到一臺(tái)機(jī)器上,本地機(jī)器要編譯時(shí)統(tǒng)一去這臺(tái)機(jī)器拉 cache,這樣如果我們切換分支時(shí)執(zhí)行構(gòu)建也能用 Build Cache 來(lái)加快構(gòu)建速度。
--build-cache 的具有使用需要注意一些事項(xiàng),比如得 Gradle 4.3 以上才有效,建議大家直接去官網(wǎng)查查看。
- 增加 --parallel 參數(shù)
并行執(zhí)行在多項(xiàng)目編譯的項(xiàng)目中能有效提升編譯的速度,但是并行執(zhí)行的前提是每個(gè)項(xiàng)目已經(jīng)被模塊化,每個(gè)項(xiàng)目之間沒(méi)有耦合。
- 移除 --refresh-dependencies 參數(shù)
原來(lái) gradle build 有加這個(gè)參數(shù),這個(gè)參數(shù)會(huì)忽略緩存,強(qiáng)制重新下載,顯然是編譯的瓶頸。
2、任務(wù)并行
原來(lái) Jenkins 中執(zhí)行 Gradle 編譯任務(wù),每個(gè) Task 是串行執(zhí)行的,總編譯耗時(shí)是每個(gè)任務(wù)執(zhí)行時(shí)間的總和。
現(xiàn)在把它改成了并行的
顯然并行執(zhí)行會(huì)快得多。
3、將大項(xiàng)目工程中的常用代碼抽成 jar 包
對(duì)于業(yè)務(wù)方來(lái)說(shuō),采用這種方式也是提升編譯速度的有效手段 ,將大量代碼抽成 jar 包,意味著它們本身就是字節(jié)碼了,在 gradle build 時(shí)就不用編譯啦。自然能提升整個(gè)工程的編譯打包時(shí)間。
來(lái)源 | 碼海
作者 | 碼海
原文鏈接:https://developer.aliyun.com/article/767051?
版權(quán)聲明:如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,歡迎發(fā)送郵件至:developerteam@list.alibaba-inc.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的Gradle 编译速度提升 70%!怎么做到的?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何让 Flutter 应用更好地使用
- 下一篇: 阿里面试官:什么样的人能在阿里晋升?