Makes file matching / expanding much faster (in some situations twice as fast)#1562
Makes file matching / expanding much faster (in some situations twice as fast)#1562cspotcode wants to merge 2 commits intogruntjs:mainfrom
Conversation
|
Thank you for your pull request. It looks like this may be your first contribution to a jQuery Foundation project, if so we need you to sign our Contributor License Agreement (CLA). 📝 Please visit http://contribute.jquery.org/CLA/ to sign. After you signed, the PR is checked again automatically after a minute. If there's still an issue, please reply here to let us know. If you've already signed our CLA, it's possible your git author information doesn't match your CLA signature (both your name and email have to match), for more information, check the status of your CLA check. |
…k.normalizeMultiTaskFiles` by caching glob fs results across multiple calls to `glob.sync`
- IO is not necessary for exclusions because they exclude file paths that have already been discovered. Using `file.match` / `minimatch` is sufficient. - adds optional `excludeFn` callback to `processPatterns`. If provided, it will be called instead of `fn` for exclusion patterns.
3c94d8b to
56131e3
Compare
|
Any chance of getting this merged? Is there anything I can clarify or update? Are there any problems that prevent merging? I've signed the CLA; @jquerybot's commit status is incorrect. |
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