perf: check existsSync before calling unlinkSync #156
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
unlinkSync
is very expensive when it throws, which it will do ifexistsSync
returnsfalse
for the path. In my large ember app this gets hit a lot. Note that almost all of the time spent inunlinkSync
comes from error handling, which is only needed whenunlinkSync
would throw. Adding this guard shaves about 4 seconds off of the 21 seconds spent in _copy. I suspect there are more performance improvements to be made here.These tests were done with node v16.16. The fs error handling behavior/perf might vary across node versions.
Before:
unlinkSync
takes 4.9s of 21s in_copy
After:
unlinkSync
takes 0s of 17s in_copy