grunt icon indicating copy to clipboard operation
grunt copied to clipboard

Makes file matching / expanding much faster (in some situations twice as fast)

Open cspotcode opened this issue 8 years ago • 3 comments

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

cspotcode avatar Nov 07 '16 20:11 cspotcode

CLA assistant check
All committers have signed the CLA.

jsf-clabot avatar Nov 07 '16 20:11 jsf-clabot

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.

jquerybot avatar Nov 07 '16 20:11 jquerybot

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.

cspotcode avatar Apr 22 '17 20:04 cspotcode