Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Initial benchmark shows ~700x improvement.
It doesn't use sandbox so its not 100% compatible with previous version but I think its very hard to accidentally leak anything. On the other hand it now allows combining conditions for some complex queries.
I started with a version that uses
new Function()
instead ofeval
. tonistiigi/node-bunyan@master...condition-function In my opinion its cleaner but in this version condition needs to be a Javascript expression. So instead onif()
you would have to use?:
etc. (dtrace users should be used to this). Anyway, it also turned out to be slower thaneval
. The slow part is the assignment of__proto__
for the log level definitions, without it its faster thaneval
.Benchmark results:
Tested on a real log file with 1k/30k rows. Conditions matched for ~5% of the rows.
Original 1k rows: 12.557s flamegraph
Eval 30k rows: 0.449s flamegraph
Function 30k rows: 0.551s flamegraph
Eval no dunder proto 30k rows: 0.424s flamegraph
Function no dunder proto 30k rows: 0.390s flamegraph