vscode icon indicating copy to clipboard operation
vscode copied to clipboard

Optimise default glue paths in settings

Open kieran-ryan opened this issue 1 year ago • 1 comments
trafficstars

🤔 What's changed?

  • Optimised default glue paths to merge repeated patterns to improve performance

⚡️ What's your motivation?

  • As the extension performs a complete reindex on code changes for specified glob paths, it is important that these paths are optimal for best performance
  • Code volume is reduced considerably, making it clearer which file extensions are expected under common paths

🏷️ What kind of change is this?

  • :bank: Refactoring/debt/DX (improvement to code design, tooling, etc. without changing behaviour)

📋 Checklist:

  • [x] I agree to respect and uphold the Cucumber Community Code of Conduct
  • [x] My change requires a change to the documentation.
    • [x] I have updated the documentation accordingly.
  • [x] Users should know about my change
    • [x] I have added an entry to the "Unreleased" section of the CHANGELOG, linking to this pull request.
  • [x] Complete benchmark of the changes

kieran-ryan avatar May 13 '24 20:05 kieran-ryan

Benchmarked the fast-glob globbing library used by the Language Server through the node-glob benchmark.

Negligible difference for synchronous operations and interestingly the existing pattern appears to be around 17% faster (0.069s -> 0.081s); which is fairly insubstantial and may be a favourable tradeoff for a simplified default configuration. Though present performance constraints (#152) must also be considered.

@kieran-ryan ➜ /workspaces/node-glob (main) $ npm run bench

> [email protected] prebench
> npm run prepare


> [email protected] prepare
> tshy


> [email protected] bench
> bash benchmark.sh


--- pattern: 'features/**/*{.js,.jsx,.php,.py,.rb,.rs,.ts,.tsx,_test.go,.java}' ---
[ 'features/**/*{.js,.jsx,.php,.py,.rb,.rs,.ts,.tsx,_test.go,.java}' ]
~~ sync ~~
node fast-glob sync             0m0.089s  0
node globby sync                0m0.090s  0
node current globSync mjs       0m0.068s  0
node current glob syncStream    0m0.067s  0
~~ async ~~
node fast-glob async            0m0.081s  0
node globby async               0m0.092s  0
node current glob async mjs     0m0.068s  0
node current glob stream        0m0.067s  0

--- pattern: 'features/**/*.js features/**/*.jsx features/**/*.php features/**/*.py features/**/*.rb features/**/*.rs features/**/*.ts features/**/*.tsx features/**/*_test.go features/**/*.java' ---
[ 'features/**/*.js', 'features/**/*.jsx', 'features/**/*.php', 'features/**/*.py', 'features/**/*.rb', 'features/**/*.rs', 'features/**/*.ts', 'features/**/*.tsx', 'features/**/*_test.go', 'features/**/*.java' ]
~~ sync ~~
node fast-glob sync             0m0.090s  0
node globby sync                0m0.090s  0
node current globSync mjs       0m0.063s  0
node current glob syncStream    0m0.081s  0
~~ async ~~
node fast-glob async            0m0.069s 0
node globby async               0m0.093s  0
node current glob async mjs     0m0.067s  0
node current glob stream        0m0.117s  0

kieran-ryan avatar May 14 '24 20:05 kieran-ryan