日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot 启动,1 秒搞定!

發(fā)布時間:2025/3/21 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot 启动,1 秒搞定! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文:?dev.to?翻譯:?ImportNew.com?-?唐尤華
譯文:?http://www.importnew.com/30647.html

“Spring有多快?”

這是?2018?Spring?One?Platform?中的一場會議。看完會議視頻,我自己動手試了一下。下面是我做出的測試結(jié)果。

還沒有觀看視頻的朋友推薦看一下,非常有意思。

https://springoneplatform.io/2018/sessions/how-fast-is-spring-

本文使用的代碼

https://github.com/bufferings/spring-boot-startup-mybench

↓我使用的是?OpenJDK?11。

? java --version

openjdk 11.0.1 2018-10-16

OpenJDK Runtime Environment 18.9 (build 11.0.1+13)

OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)

可以按照下面這樣運(yùn)行基準(zhǔn)測試。運(yùn)行起來可能需要一些時間,下面會執(zhí)行所有的測試。

? ./mvnw clean package

? (cd benchmarks/; java -jar target/benchmarks.jar)

1. FluxBaseline

我使用?SpringInitializr?創(chuàng)建項目,僅包含?Reactive?Web。接下來,我會寫一個?WebMVC?風(fēng)格的極簡controller。

@SpringBootApplication @RestController public class DemoApplication {@GetMapping("/")public String home() {return "Hello";}public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}

Spring?Boot?版本是?2.1.0.RELEASE。

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.0.RELEASE</version><relativePath/>?<!--?lookup?parent?from?repository?--> </parent>

啟動結(jié)果?2.938?±?0.287?s/op

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

現(xiàn)在,以這個結(jié)果作為基線。讓我們從這里開始。

2. WebMVC

我很好奇為什么要用?WebMVC?而不是?WebFlux??我嘗試了一下。也許僅僅是為了比較?Tomcat?和?Netty?

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case02_Web? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ss? ?10? 3.281 ± 0.342? ?s/op

WebFlux?快了一點,難道不是嗎?

3. spring-context-indexer

接下來,我試了?spring-context-indexer,似乎創(chuàng)建了?component?index。

<dependency><groupId>org.springframework</groupId><artifactId>spring-context-indexer</artifactId><optional>true</optional> </dependency>

嗯…慢了一點點?

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case03_WithContextIndexer? ? ? ? ? ? ? ? ss? ?10? 3.063 ± 0.102? ?s/op

我檢查了?spring.components,發(fā)現(xiàn)只包含了一個組件。了解...我應(yīng)該嘗試更大一點的項目,這樣才能看到效果。

#

#Sun?Nov?04?18:42:59?JST?2018

com.example.DemoApplication=org.springframework.stereotype.Component

4. 惰性初始化

嘗試了惰性初始化。Spring Boot 2.2 增加了一個新功能,啟動飛起,大家可以看下這篇文章,馬上就要上市了。?

@Configuration public class LazyInitBeanFactoryPostProcessor implements BeanFactoryPostProcessor {@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {for?(String?beanName?:?beanFactory.getBeanDefinitionNames())?{beanFactory.getBeanDefinition(beanName).setLazyInit(true);}}}

查看結(jié)果,啟動變快了一點。

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case04_WithLazyInit? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.844 ± 0.129? ?s/op

5. NoVerify

運(yùn)行加?-noverify?選項:

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case05_WithNoVerifyOption? ? ? ? ? ? ? ? ss? ?10? 2.582 ± 0.060? ?s/op

啟動變得快了一點。不知道為什么有這個結(jié)果,稍后需要仔細(xì)了解一下。

6. TieredStopAtLevel

運(yùn)行加?-XX:TieredStopAtLevel=1?選項:

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case06_WithTieredStopAtLevel1Option? ? ? ss? ?10? 1.980 ± 0.037? ?s/op

嗯,快多了!減少了幾乎2秒。還是不知道這個參數(shù)有什么含義,稍后需要仔細(xì)了解一下。

7. 指定 SpringConfigLocation 參數(shù)

運(yùn)行加?-Dspring.config.location=classpath:/application.properties?選項:

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case07_WithSpringConfigLocationOption? ? ss? ?10? 3.026 ± 0.139? ?s/op

嗯,又變慢了。

8. 關(guān)閉 JMX

運(yùn)行加?-Dspring.jmx.enabled=false?選項:

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case08_WithJmxDisabledOption? ? ? ? ? ? ?ss? ?10? 2.877 ± 0.097? ?s/op

變得快了一點。

9. 取消 Logback

從這里開始,我開始減少函數(shù)庫。開始,取消?Logback:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId><exclusions><exclusion><artifactId>spring-boot-starter-logging</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions> </dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId> </dependency>

結(jié)果如下:

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case09_WithoutLogback? ? ? ? ? ? ? ? ? ? ss? ?10? 2.904 ± 0.096? ?s/op

嗯…似乎有一點點改進(jìn)?

10. 取消 Jackson

接下來是 Jackson

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId><exclusions><exclusion><artifactId>spring-boot-starter-json</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions> </dependency>

結(jié)果如下:

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case10_WithoutJackson? ? ? ? ? ? ? ? ? ? ss? ?10? 2.789 ± 0.093? ?s/op

結(jié)果變快了一點。

11. 取消 HibernateValidator

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId><exclusions><exclusion><artifactId>hibernate-validator</artifactId><groupId>org.hibernate.validator</groupId></exclusion></exclusions> </dependency>

結(jié)果如下:

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case11_WithoutHibernateValidator? ? ? ? ?ss? ?10? 2.857 ± 0.084? ?s/op

也有一點效果。

到這里為止,不再取消函數(shù)庫了。

12. AppCDS

AppCDS?(Application?Class?Data?Sharing)?是?Oracle?JDK?的一個企業(yè)版功能。OpenJDK?10?開始包含了這個功能。

看起來?AppCDS?轉(zhuǎn)儲信息存到了一個共享壓縮文件,所以啟動時間變短了。

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case12_WithAppCds? ? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.957 ± 0.079? ?s/op

嗯…并沒有變快…然后我閱讀了CDS的相關(guān)文章,找到原因了。

SpringBoot?FatJAR?不在?CDS?管理范圍內(nèi)。

13. 使用 Thin Launcher 的 Flux

嗯,對不起,“Exploded”?基準(zhǔn)測試錯了。我曾經(jīng)試著使用?FatJAR,但是?CDS?不能這么干。所以,我轉(zhuǎn)而使用?Thin?Launcher,所以?“Exploded”?就變成了?“Thin?Launche”。

使用?CDS?以前,我會測試使用?Thin?Launcher?打包?JAR?文件的啟動速度。

<plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><dependencies><dependency><groupId>org.springframework.boot.experimental</groupId><artifactId>spring-boot-thin-layout</artifactId><version>1.0.15.RELEASE</version></dependency></dependencies></plugin> </plugins>

盡管我使用?Thin?Launcher?打包?app,但并沒有使用?Thin?Launcher?啟動類,而是使用?Main?class?讓啟動盡可能快一些。

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case13_Exploded? ? ? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.476 ± 0.091? ?s/op

嗯,快了一點,對嗎?

14. Thin Launcher + CDS

現(xiàn)在,我要使用?AppCDS?。

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case14_ExplodedWithAppCds? ? ? ? ? ? ? ? ss? ?10? 1.535 ± 0.036? ?s/op

喔!變得更快了!

15. 所有操作都上

最終,我把所有操作都用上。

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case15_AllApplied? ? ? ? ? ? ? ? ? ? ? ? ss? ?10? 0.801 ± 0.037? ?s/op

小于1秒鐘!(∩′?`)∩耶

更進(jìn)一步

在?Dave?的視頻中,他提到了“函數(shù)式?Bean?定義”,嘗試僅使用?Spring?不用?Spring?Boot,app變得更快了。其中的道理還需要進(jìn)一步了解。

結(jié)果:

Benchmark? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Mode? Cnt? Score? ?Error? Units

MyBenchmark.case01_FluxBaseline? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.938 ± 0.287? ?s/op

MyBenchmark.case02_Web? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ss? ?10? 3.281 ± 0.342? ?s/op

MyBenchmark.case03_WithContextIndexer? ? ? ? ? ? ? ? ss? ?10? 3.063 ± 0.102? ?s/op

MyBenchmark.case04_WithLazyInit? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.844 ± 0.129? ?s/op

MyBenchmark.case05_WithNoVerifyOption? ? ? ? ? ? ? ? ss? ?10? 2.582 ± 0.060? ?s/op

MyBenchmark.case06_WithTieredStopAtLevel1Option? ? ? ss? ?10? 1.980 ± 0.037? ?s/op

MyBenchmark.case07_WithSpringConfigLocationOption? ? ss? ?10? 3.026 ± 0.139? ?s/op

MyBenchmark.case08_WithJmxDisabledOption? ? ? ? ? ? ?ss? ?10? 2.877 ± 0.097? ?s/op

MyBenchmark.case09_WithoutLogback? ? ? ? ? ? ? ? ? ? ss? ?10? 2.904 ± 0.096? ?s/op

MyBenchmark.case10_WithoutJackson? ? ? ? ? ? ? ? ? ? ss? ?10? 2.789 ± 0.093? ?s/op

MyBenchmark.case11_WithoutHibernateValidator? ? ? ? ?ss? ?10? 2.857 ± 0.084? ?s/op

MyBenchmark.case12_WithAppCds? ? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.957 ± 0.079? ?s/op

MyBenchmark.case13_Exploded? ? ? ? ? ? ? ? ? ? ? ? ? ss? ?10? 2.476 ± 0.091? ?s/op

MyBenchmark.case14_ExplodedWithAppCds? ? ? ? ? ? ? ? ss? ?10? 1.535 ± 0.036? ?s/op

MyBenchmark.case15_AllApplied? ? ? ? ? ? ? ? ? ? ? ? ss? ?10? 0.801 ± 0.037? ?s/op

真的很有意思。感謝!

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Spring Boot 启动,1 秒搞定!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美激情一区二区三区蜜桃视频 | 国产人妖ts重口系列网站观看 | 欧美特级黄色录像 | 变态另类丨国产精品 | 四虎av在线播放 | 久青草免费视频 | 夜夜骑天天操 | 欧美成在线| 欧美成人资源 | 玖玖在线免费视频 | 区一区二区三 | 2019国产精品| 日本中文字幕在线不卡 | 亚洲精品第三页 | 无码人妻精品丰满熟人区 | 人妻 丝袜美腿 中文字幕 | 色视频导航| 欧美高清一级 | 麻豆视频黄色 | 免费成人深夜夜 | 日日碰日日操 | 久青草影院 | 91理论片 | 三级在线网址 | 四川话毛片少妇免费看 | 麻豆视频在线看 | 国产情侣一区二区三区 | 日本激情视频一区二区三区 | 日韩欧美精品 | 日本黄色片段 | 99ri视频| 性中国古装videossex | xx色综合 | 1000部啪啪 | 亚洲激情视频在线播放 | 国产jjizz一区二区三区视频 | 亚洲国产无 | 婷婷成人av| 日本大胆欧美人术艺术 | 91丨porny丨对白 | 六月激情 | 丰满岳乱妇在线观看中字无码 | 少妇喷潮明星 | www视频免费在线观看 | 国产超级av | 亚洲精品成av人片天堂无码 | 国产成人综合亚洲 | 亚洲精品久久久蜜桃网尤妮丝 | 六月丁香在线视频 | 丰满人妻翻云覆雨呻吟视频 | 久久久久久国产精品免费 | 草草草在线 | 日韩精品一区二区三区中文在线 | 91高清在线视频 | 超碰在线网| 97公开视频 | av色先锋 | 久久不卡日韩美女 | 中文字幕一区二区三区电影 | 色综合久久88色综合天天 | 色综合久久综合 | 男人添女人下部高潮视频 | 三级精品在线观看 | 在线久 | 国av在线| 成人综合网址 | 男人天堂成人网 | 日韩av在线电影 | 天天干导航 | 亚洲精品av中文字幕在线在线 | 成人av免费在线观看 | 男人的天堂在线播放 | 欧美激情图 | 国产精品熟妇人妻g奶一区 a少妇 | 青青视频免费在线观看 | 国产污视频在线播放 | 一区二区三区免费看 | av网站导航 | 韩国美女黄色片 | 国产又粗又猛又爽又 | 尤物精品视频在线观看 | 久久久久久久久久电影 | 午夜精品一区二区在线观看 | 夜夜操天天 | xxx老太太 | 国产精品xxxx | 亚洲 激情 | 青青青免费视频观看在线 | 国产成人毛毛毛片 | 国产欧美激情在线观看 | 精品综合久久久久 | 黄色片不卡 | 久青草视频在线观看 | 国产精品久久不卡 | 在线电影一区二区 | 91性高潮久久久久久久久 | 爆操女秘书 | 国产欧美不卡 | 夜夜春av|