[Support Guide] How can I optimize my Netlify build time?

Good morning @fool,

Did you have any luck with unlinking these sites?

  • 9817c7b9-1d9f-4f33-8aba-f998885bd9d9
  • 17e78315-c641-45aa-aacc-1c4f9f819b9d

Sorry my developers are chasing after me on this.

Thanking you :smiley:

these are unlinked now, @angslice!

1 Like

I have the same issue as @nicolasrouanne, the command works locally (macOS) but not when run on Netlify in the build step.

Hey @kmiyashiro,

What error are you getting? Have you tried the .sh script as advised? What did this show/tell?

Could you please unlink:

  • cdfef0c1-d55d-4c75-8e1a-13eb1a2e983c (phoenix-slipstream)

Hi, @PHOENiX. Done! :+1:

Hello. I would appreciate it if you would unlink:

  • fbceb7f7-7e90-4116-9d0b-107bdcfecfe9

Thanks! Please email or message me if you need additional details, verification, etc.

No problem @brycewray, just got it unhooked for you.

1 Like

Hi there. Reading this thread with interest. My use case is that I have active editors (people) on a CMS like Forestry.io. Imagine that they log in and edit ten documents in series, over 10 minutes. In this case I wish to avoid building the site ten times in ten minutes.

Is there a way to ask Netlify to not build a commit until X minutes have passed since the last commit?

The way this would work would be like a tape-delay on Live TV. Something like “wait five minutes to build this, and ignore if a new commit comes first?”

I’d enable a “build delay” variable on every site, immediately. I bet it would drastically reduce CPU for builds on many sites.

That is not a feature we have today, though it’s not a bad suggestion so I will get a feature request filed, though I do not expect it to be implemented soon since you are the first to ask for it.

If your CMS commits to git, we will skip intermediate builds while some are queued - but for most build hook triggered builds (I think you maybe use this feature to trigger a build on update from forestry? https://docs.netlify.com/configure-builds/build-hooks/).

So I guess you have a few options based on what’s available today:

  • reconfigure forestry not to send so many updates. Not sure if that is possible, but it is the best advice I know of. Some other headless CMS’s (contentful for instance) have a setting about how often they notify webhooks about changes - e.g. “on intentional save, not on autosave”). Maybe forestry has something similar?
  • don’t autopublish - do so manually. Use a build hook such as I linked BUT NOT FROM FORESTRY - instead, from something like a cron server, or a scheduled zap to build every hour during the editing day, or once a day. Or, only when someone pushes a button or runs an API call manually.
  • send the updates from forestry to an intermediary system like zapier which then triggers our builds selectively: Zapier can notice “I’ll only forward this if I haven’t just forwarded one in the past few minutes” or “I’ll notify about every 5th one” and other similar logic.

Except for reconfiguring forestry which I understand may not be possible or desirable for other reasons, I don’t love giving out workarounds that require other systems, but to accomplish your goal, that’s the best I have for you today.

That’s so cool, thanks for the reply.

Often, in a first-party application built by a tech company for a tech company, building from Circle or elsewhere would provide ample control, but in this particular use case, we are trying to cater to small business “mom and pop” users who are minimally tech-savvy (hence Forestry). If Forestry has such a feature I would use it. Building on cron would likely not result in a net savings due to many days where no edits would happen at all. Zapier’s not a bad suggestion. All that said, if there could be a deploy-delay setting in Netlify, I’d think it would REALLY reduce overhead, likely more for Netlify than for me :wink:

Thanks again for filing the feature request

I get the same exact error as nicolasrouanne:

I tried creating a bash script as you suggested, I still get this message:

4:41:26 PM: Detected ignore command in Netlify configuration file. Proceeding with the specified command: './netlify-ignore.sh'
4:41:26 PM: Attempt to ignore dependabot deploys in script
4:41:26 PM: User-specified ignore command returned exit code 0. Returning early from build.
4:41:26 PM: Failed during stage 'checking build content for changes': Canceled build due to no content change
4:41:26 PM: Finished processing build request in 18.713326072s

https://app.netlify.com/sites/kellymiyashiro/deploys/5efa7c0d4e7f03000700ed0b

Keep in mind that the command itself (git log... grep dependabot) works perfectly fine when run locally, it just does not work in netlify’s build process.

Edit: I just realized I have “dependabot” in my test commit, let me try removing it and seeing if the script works…

Edit2: It works! Thanks! I would suggest changing the original blog post to put the command in a script.

1 Like

Hi,
Could you switch off the CI for this site too?

  • e6bab94d-3483-4da9-8969-f3e16b10f1cd

Thank you!

Hi, @lollypop3103, you can stop the builds with a site setting now:

This is not something that needs to be requested in community anymore and you can change the setting yourself anytime.

Hi, @luke
Thank you for the information.
I’m sorry. I seem to have been referring to an old document.
I’ll give it a try.

Thank you.

Hi @luke, I want to deploy my site that is a Jekyll blog at one path segment (site.com/blog) and a React SPA at another (site.com/app). Thus I use jekyll build and npm run build respectively during the build process.

Since it’s not a standard config, Netlify doesn’t cache the gems nor npm packages.

Is there a way for me to specify what custom directories I want to be cached / files to check for updates?

I’ve looked around the docs and blog posts but couldn’t find anything about this.

Thank you!

Hi, @brycewray, you might workaround this by manually backing up the directories in question to /opt/build/cache and then manually restoring them again as part of the site build.

I don’t have “prior art” for doing this outside of a very simple shell script. However, there is a build plugin which allows for saving a directory listing of all cache contents for debugging:

Using this plugin might be helpful if you do decide to write custom code to handle this.

The code might work like this:

  • check to see if the cached files exist
  • if so move those files from the cache to the required location
  • proceed with the usual build
  • if the build is successful, copy the required files back to the cache directory
  • the build system will automatically back up the /opt/build/cache` directory after the successful build is complete

If this is done, the files will be able to be copied from the cache (using the same process above) at the start of the next build.

​Please let us know if there are other questions about this.

1 Like

Actually was @brianjychan who asked that one, but autocorrect probably got you on the “br” front. :wink: Thanks, though.

2 Likes

@brianjychan, I @mentioned the wrong person and wanted to be sure you saw my reply to you above.

(Thanks for pointing out my typo, @brycewray.) :+1:

2 Likes

@luke thanks for the pointer, with that and Create build plugins I figured out how to do it!

Suggestions
On Build Plugins, I think it would help to move the yellow “Current Build Image required” warning to the top of the page; I didn’t see it for awhile since I was doing file-based configuration.

Questions
If you have a moment, I have two unresolved problems resulting from me caching my React App dependencies instead of a fresh npm install of node_modules. These questions might be out of scope, but I wonder if you might know anything about them:

1
I saw that the create-react-app command of react-scripts build didn’t work after cache restore (using utils.cache.restore('node_modules'))

Later I found it was because node_modules/.bin/ was not cached. This caused node_modules/.bin/react-scripts to be missing.

I resolved this by manually caching the node_modules/.bin; is this an antipattern?

2
After the above, I found that react-scripts build would now run, but threw the below error.

It appears to be unable to resolve node_modules/react-scripts/scripts/build.js/ when running:
node_modules/.bin/react-scripts

Do you know why this might be?

I ended up deciding to use the executable at
node_modules/react-scripts/bin/react_scripts.js
instead, and not caching node_modules/.bin.

For more context (and if anyone else sees this), my plugin code is here:

Let me know if you see anything amiss at a glance, I doubt I have done this in the best way

Thanks for your time!