grunt
grunt copied to clipboard
Makes file matching / expanding much faster (in some situations twice as fast)
This PR avoids lots of unnecessary or duplicate filesystem operations within grunt's file.expand
, file.expandMapping
, and task.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: https://github.com/isaacs/node-glob/pull/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
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).
:memo: 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.
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.