Makes file matching / expanding much faster (in some situations twice as fast) #1562
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.
This PR avoids lots of unnecessary or duplicate filesystem operations within grunt's
file.expand
,file.expandMapping
, andtask.normalizeMultiTaskFiles
. It makes file matching much faster without adding much complexity to grunt.The first change is to persist glob's internal caches across multiple calls to glob.sync. This is a documented feature of the glob library: https://github.com/isaacs/node-glob#options
(see also: isaacs/node-glob#306)
The second change is to avoid all fs calls for exclusion patterns beginning with a "!". These patterns only exclude filepaths that have already been discovered by an inclusion pattern, so they never need to do any filesystem calls of their own.
I've created a demonstration repository that shows how in certain situations these changes make file matching twice as fast. On my laptop, a Macbook with SSD, these improvements reduce glob matching from 2.2 to 1.1 seconds.
https://github.com/cspotcode/grunt-file-matching-performance