Skip to content

[DI] Improve performance of algorithm to find probe scriptId#4729

Closed
watson wants to merge 3 commits intomasterfrom
watson/DEBUG-2605/script-id-algo
Closed

[DI] Improve performance of algorithm to find probe scriptId#4729
watson wants to merge 3 commits intomasterfrom
watson/DEBUG-2605/script-id-algo

Conversation

@watson
Copy link
Copy Markdown
Collaborator

@watson watson commented Sep 26, 2024

Warning: High risk of bikeshedding!

This might very well be overkill, but while I was refactoring this code recently, I was thinking of ways to use a Map instead of an array to store the reference between the script URL and the script ID.

This is the algorithm that I came up with.

This is not a very hot code-path as it's only hit every time a new probe is added. So it's not really necessary. So in the end this comes down to code readability and maintainability: And I can't really determine if it makes the code more readable/maintainable or worse.

What do you think?

This stack trace represents the point in the execution when the
breakpoint associated with the probe was hit.

The strack frames also include a `columnNumber` property, even though
the API doesn't yet use this property. However, support for column
information in the backend is being added in parallel.
@watson watson requested review from a team as code owners September 26, 2024 11:42
@watson watson self-assigned this Sep 26, 2024
Copy link
Copy Markdown
Collaborator Author

watson commented Sep 26, 2024

This stack of pull requests is managed by Graphite. Learn more about stacking.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Sep 26, 2024

Overall package size

Self size: 7.21 MB
Deduped: 62.61 MB
No deduping: 62.89 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/native-appsec | 8.1.1 | 18.67 MB | 18.68 MB | | @datadog/native-iast-taint-tracking | 3.1.0 | 12.27 MB | 12.28 MB | | @datadog/pprof | 5.3.0 | 9.85 MB | 10.22 MB | | protobufjs | 7.2.5 | 2.77 MB | 5.16 MB | | @datadog/native-iast-rewriter | 2.4.1 | 2.14 MB | 2.23 MB | | @opentelemetry/core | 1.14.0 | 872.87 kB | 1.47 MB | | @datadog/native-metrics | 2.0.0 | 898.77 kB | 1.3 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | jsonpath-plus | 9.0.0 | 580.4 kB | 1.03 MB | | import-in-the-middle | 1.11.2 | 112.74 kB | 826.22 kB | | msgpack-lite | 0.1.26 | 201.16 kB | 281.59 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.0 | 109.9 kB | 109.9 kB | | semver | 7.6.3 | 95.82 kB | 95.82 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | lru-cache | 7.14.0 | 74.95 kB | 74.95 kB | | ignore | 5.3.1 | 51.46 kB | 51.46 kB | | int64-buffer | 0.1.10 | 49.18 kB | 49.18 kB | | shell-quote | 1.8.1 | 44.96 kB | 44.96 kB | | istanbul-lib-coverage | 3.2.0 | 29.34 kB | 29.34 kB | | rfdc | 1.3.1 | 25.21 kB | 25.21 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | dc-polyfill | 0.1.4 | 23.1 kB | 23.1 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | path-to-regexp | 0.1.10 | 6.38 kB | 6.38 kB | | module-details-from-path | 1.0.3 | 4.47 kB | 4.47 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@pr-commenter
Copy link
Copy Markdown

pr-commenter Bot commented Sep 26, 2024

Benchmarks

Benchmark execution time: 2024-10-02 10:34:06

Comparing candidate commit d506517 in PR branch watson/DEBUG-2605/script-id-algo with baseline commit 4d2f5b8 in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 260 metrics, 6 unstable metrics.

rochdev
rochdev previously approved these changes Sep 26, 2024
Copy link
Copy Markdown
Member

@rochdev rochdev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So it's not really necessary. So in the end this comes down to code readability and maintainability: And I can't really determine if it makes the code more readable/maintainable or worse.

I think readability is down a bit and performance is up a bit, but not to an extent where I'd argue one way or the other, so if you prefer that version then LGTM.

Base automatically changed from watson/DEBUG-2605/stack to master October 2, 2024 10:13
@watson watson dismissed rochdev’s stale review October 2, 2024 10:13

The base branch was changed.

@watson
Copy link
Copy Markdown
Collaborator Author

watson commented Oct 2, 2024

There isn't much difference in the performance. Here's a benchmark on Node.js 22.9.0 of 10.000 entries (the same in both the array and the map) where the key being searched for is in the middle:

Array x 23,873 ops/sec ±3.26% (97 runs sampled)
Map x 25,972 ops/sec ±0.92% (98 runs sampled)
Fastest is Map

Benchmark source: https://gist.github.com/watson/c0119480b1be6fa647be302de670ce15

The main difference I think is that there's fewer and simpler objects being created in memory for the Map implementation.

@watson watson mentioned this pull request Oct 3, 2024
6 tasks
@watson watson added the debugger Dynamic Instrumentation & Live Debugger label Oct 28, 2024
@watson watson closed this Jan 21, 2025
@watson watson deleted the watson/DEBUG-2605/script-id-algo branch January 21, 2025 07:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

debugger Dynamic Instrumentation & Live Debugger semver-patch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants