# Lowering Build times Our goal is to lower our build times on AWS Amplify, after some research, our biggest issue here is the sheer amount of dependencies we're pulling in. We have a Node modules folder that takes up more than 1.5GB, which for a medium size app is a lot. Our main focus will be on trying to dampen the impact in the build steps, trying out different combinations of caching strategies and install flags. The results show a 50% reduction on overall time, counterintuitivelly, what made the most difference was removing all the default caching altogether, since a lot of the time consumed by AWS was spent trying to compress and deflate the cache artifact, which ended up being 2873MB. ## Results ### Baseline run: Using yarns default install behaviour and taking into account that Amplify, by default, tries to cache the node modules folder ![](https://i.imgur.com/DYJb2Jl.png) ### Using a frozen lockfile: Using yarn's --frozen-lockfile, which doesn't generate a new file and avoids going through the whole dependency tree, this is a resource intensive task, but didn't seem to impact too much the overall time spent building the app ![](https://i.imgur.com/pneLuZb.png) However, we can see in the logs (Posted below) a big portion of build time is spent in creating the cache artifact ### Frozen yarn.lock + no cache: I played around with the settings but since our biggest issue came from the node modules folder and trying to cache it was being detrimental for the build times (~6mins in building, compressing and uploading the cache artifact (2873MB)), i ended up scraping the cache alltogether ![](https://i.imgur.com/dnoo4ju.png) This reduced overall build times by ~50%, 5 minutes of build time on a cloud server isn't by any metrics fast for a small/mid-size react app, but it's way better that we used to have considering the size of the build file ## Full build logs Baseline run: ``` # Starting phase: preBuild # Executing command: nvm install 10.19.0 2021-06-08T21:53:09.625Z [INFO]: Downloading and installing node v10.19.0... 2021-06-08T21:53:09.721Z [WARNING]: Downloading https://nodejs.org/dist/v10.19.0/node-v10.19.0-linux-x64.tar.gz... 2021-06-08T21:53:09.840Z [WARNING]: ######### 2021-06-08T21:53:09.840Z [WARNING]: 13.2% 2021-06-08T21:53:09.927Z [WARNING]: ############################### 2021-06-08T21:53:09.927Z [WARNING]: ######################################### 100.0% 2021-06-08T21:53:09.939Z [WARNING]: Computing checksum with sha256sum 2021-06-08T21:53:10.015Z [WARNING]: Checksums matched! 2021-06-08T21:53:11.216Z [INFO]: Now using node v10.19.0 (npm v6.13.4) 2021-06-08T21:53:11.243Z [INFO]: # Executing command: nvm use 10.19.0 2021-06-08T21:53:11.618Z [INFO]: Now using node v10.19.0 (npm v6.13.4) 2021-06-08T21:53:11.618Z [INFO]: # Executing command: yarn install 2021-06-08T21:53:12.537Z [INFO]: yarn install v1.22.0 2021-06-08T21:53:12.675Z [INFO]: [1/4] Resolving packages... 2021-06-08T21:53:13.475Z [INFO]: success Already up-to-date. 2021-06-08T21:53:13.479Z [INFO]: Done in 0.95s. 2021-06-08T21:53:13.488Z [INFO]: # Completed phase: preBuild # Starting phase: build 2021-06-08T21:53:13.489Z [INFO]: # Executing command: yarn run build 2021-06-08T21:53:13.650Z [INFO]: yarn run v1.22.0 2021-06-08T21:53:13.678Z [INFO]: $ react-scripts --max_old_space_size=2048 build 2021-06-08T21:53:14.665Z [INFO]: Creating an optimized production build... 2021-06-08T21:55:38.067Z [INFO]: Compiled successfully. File sizes after gzip: 2021-06-08T21:55:38.443Z [INFO]: 1.33 MB build/static/js/8.94c1a63a.chunk.js 2021-06-08T21:55:38.443Z [INFO]: 202.13 KB build/static/js/main.0b63927e.chunk.js 60.43 KB build/static/js/9.09289636.chunk.js 40.8 KB build/static/js/17.87fef630.chunk.js 39.28 KB build/static/js/10.bf36739e.chunk.js 23.28 KB build/static/js/3.f1af80f9.chunk.js 17.27 KB build/static/js/13.6e389d1a.chunk.js 16.74 KB build/static/js/11.4dc3c994.chunk.js 12.39 KB build/static/js/14.cabc28c7.chunk.js 11.13 KB build/static/js/12.ab45ecf3.chunk.js 7.75 KB build/static/js/0.36f4d55a.chunk.js 6.95 KB build/static/js/15.db514245.chunk.js 6.6 KB build/static/js/2.3084c328.chunk.js 6.3 KB build/static/js/5.2d5c94fb.chunk.js 5.29 KB build/static/js/1.76c5e1cf.chunk.js 5.15 KB build/static/js/4.5d123c8b.chunk.js 4.89 KB build/static/css/8.d7f4bf98.chunk.css 4.73 KB build/static/js/33.3908c618.chunk.js 4.23 KB build/static/js/21.d0e2015a.chunk.js 4.01 KB build/static/js/19.64a49f69.chunk.js 3.74 KB build/static/js/18.e5971879.chunk.js 3.64 KB build/static/js/16.7dc9bbc3.chunk.js 2.1 KB build/static/js/25.35f1c01f.chunk.js 1.95 KB build/static/js/26.1b38de67.chunk.js 2021-06-08T21:55:38.444Z [INFO]: 1.86 KB build/static/js/20.bdc1207a.chunk.js 1.82 KB build/static/js/runtime-main.236fe0c6.js 1.17 KB build/static/js/22.15cc26db.chunk.js 1.11 KB build/static/css/0.c8ccacc5.chunk.css 944 B build/static/js/23.b991e0be.chunk.js 428 B build/static/js/28.6ed5eb48.chunk.js 339 B build/static/js/24.e3648347.chunk.js 336 B build/static/js/27.47651706.chunk.js 319 B build/static/js/30.a5e590ad.chunk.js 318 B build/static/js/29.5af21e79.chunk.js 309 B build/static/js/31.4475ba1c.chunk.js 302 B build/static/js/32.2a2f604a.chunk.js 241 B build/static/css/main.2d5defd0.chunk.css 2021-06-08T21:55:38.444Z [INFO]: The bundle size is significantly larger than recommended. Consider reducing it with code splitting: https://goo.gl/9VhYWB You can also analyze the project dependencies: https://goo.gl/LeUzfb 2021-06-08T21:55:38.444Z [INFO]: The project was built assuming it is hosted at /. You can control this with the homepage field in your package.json. The build folder is ready to be deployed. You may serve it with a static server: 2021-06-08T21:55:38.444Z [INFO]: yarn global add serve serve -s build Find out more about deployment here: bit.ly/CRA-deploy 2021-06-08T21:55:38.537Z [INFO]: Done in 144.89s. 2021-06-08T21:55:38.540Z [INFO]: # Completed phase: build 2021-06-08T21:55:38.541Z [INFO]: ## Build completed successfully 2021-06-08T21:55:38.543Z [INFO]: # Starting caching... 2021-06-08T21:55:38.695Z [INFO]: Creating cache artifact... 2021-06-08T22:00:29.200Z [INFO]: # Cache artifact is: 2688MB 2021-06-08T22:00:29.349Z [INFO]: # Uploading cache artifact... 2021-06-08T22:00:57.468Z [INFO]: # Caching completed 2021-06-08T22:00:57.601Z [INFO]: No custom headers found. 2021-06-08T22:00:57.678Z [INFO]: # Starting build artifact upload process... 2021-06-08T22:00:58.754Z [INFO]: # Build artifact is: 9MB 2021-06-08T22:00:58.755Z [INFO]: # Uploading build artifact '__artifacts.zip'... 2021-06-08T22:00:58.790Z [INFO]: # Build artifact is: 9MB 2021-06-08T22:00:58.791Z [INFO]: # Uploading build artifact '__artifactsHash.zip'... 2021-06-08T22:00:59.169Z [INFO]: # Build artifact upload completed 2021-06-08T22:00:59.170Z [INFO]: # Starting environment caching... 2021-06-08T22:00:59.171Z [INFO]: # Uploading environment cache artifact... 2021-06-08T22:00:59.269Z [INFO]: # Environment caching completed Terminating logging... ``` ### Using a frozen lockfile ``` # Starting phase: preBuild # Executing command: nvm install 10.19.0 2021-06-11T14:36:30.207Z [INFO]: Downloading and installing node v10.19.0... 2021-06-11T14:36:30.302Z [WARNING]: Downloading https://nodejs.org/dist/v10.19.0/node-v10.19.0-linux-x64.tar.gz... 2021-06-11T14:36:30.421Z [WARNING]: ###### 2021-06-11T14:36:30.422Z [WARNING]: 9.4% 2021-06-11T14:36:30.521Z [WARNING]: ################################ 2021-06-11T14:36:30.522Z [WARNING]: ################################# 90.8% 2021-06-11T14:36:30.531Z [WARNING]: #################### 2021-06-11T14:36:30.531Z [WARNING]: #################################################### 100.0% 2021-06-11T14:36:30.543Z [WARNING]: Computing checksum with sha256sum 2021-06-11T14:36:30.622Z [WARNING]: Checksums matched! 2021-06-11T14:36:31.946Z [INFO]: Now using node v10.19.0 (npm v6.13.4) 2021-06-11T14:36:31.974Z [INFO]: # Executing command: nvm use 10.19.0 2021-06-11T14:36:32.357Z [INFO]: Now using node v10.19.0 (npm v6.13.4) 2021-06-11T14:36:32.357Z [INFO]: # Executing command: yarn install --frozen-lockfile 2021-06-11T14:36:33.128Z [INFO]: yarn install v1.22.0 2021-06-11T14:36:33.274Z [INFO]: [1/4] Resolving packages... 2021-06-11T14:36:34.095Z [INFO]: success Already up-to-date. 2021-06-11T14:36:34.099Z [INFO]: Done in 0.97s. 2021-06-11T14:36:34.109Z [INFO]: # Completed phase: preBuild # Starting phase: build 2021-06-11T14:36:34.109Z [INFO]: # Executing command: yarn run build 2021-06-11T14:36:34.278Z [INFO]: yarn run v1.22.0 2021-06-11T14:36:34.308Z [INFO]: $ react-scripts --max_old_space_size=2048 build 2021-06-11T14:36:35.328Z [INFO]: Creating an optimized production build... 2021-06-11T14:38:54.646Z [INFO]: Compiled successfully. 2021-06-11T14:38:54.648Z [INFO]: File sizes after gzip: 2021-06-11T14:38:55.041Z [INFO]: 1.33 MB build/static/js/8.954f83c0.chunk.js 2021-06-11T14:38:55.041Z [INFO]: 200.79 KB build/static/js/main.342162a8.chunk.js 60.42 KB build/static/js/9.b220e25c.chunk.js 40.8 KB build/static/js/17.87fef630.chunk.js 39.28 KB build/static/js/10.8015f651.chunk.js 23.28 KB build/static/js/3.7c27c7c1.chunk.js 17.27 KB build/static/js/13.4a23ea48.chunk.js 16.74 KB build/static/js/11.4dc3c994.chunk.js 12.39 KB build/static/js/14.d638e5bb.chunk.js 11.13 KB build/static/js/12.416db321.chunk.js 7.75 KB build/static/js/0.36f4d55a.chunk.js 6.95 KB build/static/js/15.ded575a1.chunk.js 6.6 KB build/static/js/2.1a05b2cd.chunk.js 6.3 KB build/static/js/5.69b5297a.chunk.js 5.29 KB build/static/js/1.76c5e1cf.chunk.js 5.15 KB build/static/js/4.5d123c8b.chunk.js 4.89 KB build/static/css/8.424ab3d1.chunk.css 4.73 KB build/static/js/33.3908c618.chunk.js 4.23 KB build/static/js/21.382601f8.chunk.js 4.01 KB build/static/js/19.df416acf.chunk.js 3.74 KB build/static/js/18.4320f0c0.chunk.js 2021-06-11T14:38:55.041Z [INFO]: 3.64 KB build/static/js/16.a782c7aa.chunk.js 2.11 KB build/static/js/25.93150d8f.chunk.js 1.95 KB build/static/js/26.e20eecbd.chunk.js 1.86 KB build/static/js/20.35fc2d51.chunk.js 1.82 KB build/static/js/runtime-main.fcd4bd90.js 1.17 KB build/static/js/22.a71065ed.chunk.js 1.11 KB build/static/css/0.b924743b.chunk.css 2021-06-11T14:38:55.042Z [INFO]: 945 B build/static/js/23.99b879f3.chunk.js 428 B build/static/js/28.6ed5eb48.chunk.js 339 B build/static/js/24.e3648347.chunk.js 336 B build/static/js/27.47651706.chunk.js 319 B build/static/js/30.a5e590ad.chunk.js 318 B build/static/js/29.5af21e79.chunk.js 309 B build/static/js/31.4475ba1c.chunk.js 302 B build/static/js/32.2a2f604a.chunk.js 242 B build/static/css/main.be003f03.chunk.css The bundle size is significantly larger than recommended. Consider reducing it with code splitting: https://goo.gl/9VhYWB 2021-06-11T14:38:55.042Z [INFO]: You can also analyze the project dependencies: https://goo.gl/LeUzfb The project was built assuming it is hosted at /. 2021-06-11T14:38:55.042Z [INFO]: You can control this with the homepage field in your package.json. The build folder is ready to be deployed. You may serve it with a static server: yarn global add serve serve -s build 2021-06-11T14:38:55.042Z [INFO]: Find out more about deployment here: bit.ly/CRA-deploy 2021-06-11T14:38:55.131Z [INFO]: Done in 140.86s. 2021-06-11T14:38:55.135Z [INFO]: # Completed phase: build 2021-06-11T14:38:55.136Z [INFO]: ## Build completed successfully 2021-06-11T14:38:55.138Z [INFO]: # Starting caching... 2021-06-11T14:38:55.269Z [INFO]: Creating cache artifact... 2021-06-11T14:43:34.940Z [INFO]: # Cache artifact is: 2816MB 2021-06-11T14:43:35.023Z [INFO]: # Uploading cache artifact... 2021-06-11T14:43:54.077Z [INFO]: # Caching completed 2021-06-11T14:43:54.159Z [INFO]: No custom headers found. 2021-06-11T14:43:54.258Z [INFO]: # Starting build artifact upload process... 2021-06-11T14:43:55.381Z [INFO]: # Build artifact is: 9MB 2021-06-11T14:43:55.383Z [INFO]: # Uploading build artifact '__artifactsHash.zip'... 2021-06-11T14:43:55.421Z [INFO]: # Build artifact is: 9MB 2021-06-11T14:43:55.421Z [INFO]: # Uploading build artifact '__artifacts.zip'... 2021-06-11T14:43:56.164Z [INFO]: # Build artifact upload completed 2021-06-11T14:43:56.165Z [INFO]: # Starting environment caching... 2021-06-11T14:43:56.166Z [INFO]: # Uploading environment cache artifact... 2021-06-11T14:43:56.257Z [INFO]: # Environment caching completed Terminating logging... ``` ### Frozen yarn.lock + no cache: ``` # Starting phase: preBuild # Executing command: nvm install 10.19.0 2021-06-11T15:46:31.593Z [INFO]: Downloading and installing node v10.19.0... 2021-06-11T15:46:31.701Z [WARNING]: Downloading https://nodejs.org/dist/v10.19.0/node-v10.19.0-linux-x64.tar.gz... 2021-06-11T15:46:31.816Z [WARNING]: ## 2021-06-11T15:46:31.817Z [WARNING]: 2.9% 2021-06-11T15:46:31.917Z [WARNING]: #################################### 2021-06-11T15:46:31.917Z [WARNING]: ############ 67.5% 2021-06-11T15:46:31.964Z [WARNING]: ############################# 2021-06-11T15:46:31.964Z [WARNING]: ########################################### 100.0% 2021-06-11T15:46:31.975Z [WARNING]: Computing checksum with sha256sum 2021-06-11T15:46:32.055Z [WARNING]: Checksums matched! 2021-06-11T15:46:33.242Z [INFO]: Now using node v10.19.0 (npm v6.13.4) 2021-06-11T15:46:33.269Z [INFO]: # Executing command: nvm use 10.19.0 2021-06-11T15:46:33.665Z [INFO]: Now using node v10.19.0 (npm v6.13.4) 2021-06-11T15:46:33.665Z [INFO]: # Executing command: yarn install --frozen-lockfile 2021-06-11T15:46:34.452Z [INFO]: yarn install v1.22.0 2021-06-11T15:46:34.601Z [INFO]: [1/4] Resolving packages... 2021-06-11T15:46:35.391Z [INFO]: success Already up-to-date. 2021-06-11T15:46:35.395Z [INFO]: Done in 0.95s. 2021-06-11T15:46:35.404Z [INFO]: # Completed phase: preBuild # Starting phase: build 2021-06-11T15:46:35.405Z [INFO]: # Executing command: yarn run build 2021-06-11T15:46:35.568Z [INFO]: yarn run v1.22.0 2021-06-11T15:46:35.597Z [INFO]: $ react-scripts --max_old_space_size=2048 build 2021-06-11T15:46:36.636Z [INFO]: Creating an optimized production build... 2021-06-11T15:49:02.974Z [INFO]: Compiled successfully. 2021-06-11T15:49:02.977Z [INFO]: File sizes after gzip: 2021-06-11T15:49:03.369Z [INFO]: 1.33 MB build/static/js/8.954f83c0.chunk.js 2021-06-11T15:49:03.370Z [INFO]: 200.79 KB build/static/js/main.f57b277d.chunk.js 60.43 KB build/static/js/9.1893fe4c.chunk.js 40.8 KB build/static/js/17.87fef630.chunk.js 39.28 KB build/static/js/10.e0ac8d5f.chunk.js 23.28 KB build/static/js/3.7c27c7c1.chunk.js 17.28 KB build/static/js/13.b1195bd9.chunk.js 16.74 KB build/static/js/11.4dc3c994.chunk.js 12.39 KB build/static/js/14.2ae34c98.chunk.js 11.13 KB build/static/js/12.f2e7b2e1.chunk.js 7.75 KB build/static/js/0.36f4d55a.chunk.js 6.95 KB build/static/js/15.1be0e0d2.chunk.js 6.6 KB build/static/js/2.ad203ca7.chunk.js 6.29 KB build/static/js/5.5d79e89e.chunk.js 5.29 KB build/static/js/1.76c5e1cf.chunk.js 5.15 KB build/static/js/4.5d123c8b.chunk.js 4.89 KB build/static/css/8.b4198469.chunk.css 4.73 KB build/static/js/33.3908c618.chunk.js 4.23 KB build/static/js/21.02c1c1c6.chunk.js 4.01 KB build/static/js/19.900cf608.chunk.js 3.74 KB build/static/js/18.e7383a29.chunk.js 3.64 KB build/static/js/16.bbc59d56.chunk.js 2.11 KB build/static/js/25.f26db511.chunk.js 2021-06-11T15:49:03.370Z [INFO]: 1.95 KB build/static/js/26.1b8fec0f.chunk.js 1.86 KB build/static/js/20.ca1e818b.chunk.js 1.82 KB build/static/js/runtime-main.6a971ce4.js 1.17 KB build/static/js/22.a71065ed.chunk.js 1.11 KB build/static/css/0.6609840a.chunk.css 945 B build/static/js/23.99b879f3.chunk.js 428 B build/static/js/28.6ed5eb48.chunk.js 339 B build/static/js/24.e3648347.chunk.js 336 B build/static/js/27.47651706.chunk.js 319 B build/static/js/30.a5e590ad.chunk.js 318 B build/static/js/29.5af21e79.chunk.js 309 B build/static/js/31.4475ba1c.chunk.js 302 B build/static/js/32.2a2f604a.chunk.js 2021-06-11T15:49:03.370Z [INFO]: 243 B build/static/css/main.7826d10c.chunk.css The bundle size is significantly larger than recommended. Consider reducing it with code splitting: https://goo.gl/9VhYWB You can also analyze the project dependencies: https://goo.gl/LeUzfb 2021-06-11T15:49:03.370Z [INFO]: The project was built assuming it is hosted at /. You can control this with the homepage field in your package.json. The build folder is ready to be deployed. You may serve it with a static server: 2021-06-11T15:49:03.370Z [INFO]: yarn global add serve serve -s build Find out more about deployment here: bit.ly/CRA-deploy 2021-06-11T15:49:03.464Z [INFO]: Done in 147.90s. 2021-06-11T15:49:03.468Z [INFO]: # Completed phase: build 2021-06-11T15:49:03.468Z [INFO]: ## Build completed successfully 2021-06-11T15:49:03.471Z [INFO]: # Starting caching... 2021-06-11T15:49:03.623Z [INFO]: Creating cache artifact... 2021-06-11T15:54:30.467Z [INFO]: # Cache artifact is: 2873MB 2021-06-11T15:54:30.546Z [INFO]: # Uploading cache artifact... 2021-06-11T15:55:00.172Z [INFO]: # Caching completed 2021-06-11T15:55:00.269Z [INFO]: No custom headers found. 2021-06-11T15:55:00.356Z [INFO]: # Starting build artifact upload process... 2021-06-11T15:55:01.515Z [INFO]: # Build artifact is: 9MB 2021-06-11T15:55:01.517Z [INFO]: # Uploading build artifact '__artifacts.zip'... 2021-06-11T15:55:01.549Z [INFO]: # Build artifact is: 9MB 2021-06-11T15:55:01.549Z [INFO]: # Uploading build artifact '__artifactsHash.zip'... 2021-06-11T15:55:02.654Z [INFO]: # Build artifact upload completed 2021-06-11T15:55:02.654Z [INFO]: # Starting environment caching... 2021-06-11T15:55:02.655Z [INFO]: # Uploading environment cache artifact... 2021-06-11T15:55:02.755Z [INFO]: # Environment caching completed Terminating logging... ```