performance: Safely ignore error stack trace

I saw this library https://github.com/isaacs/catcher and I decided to wrote a benchmark:

Doing some changes on bench/error.js, the result was:

name ops/sec samples
Error 337,720 64
Error (stackTraceLimit=0) 3,284,296 94
NodeError 283,026 99
NodeError (stackTraceLimit=0) 3,280,933 95
NodeError Range 214,825 92
NodeError Range (stackTraceLimit=0) 3,313,990 99
Code
const { createBenchmarkSuite } = require('../common')

const suite = createBenchmarkSuite('Node.js Error')

suite
  .add('Error', function () {
    try {
      new Error('test')
    } catch (e) { }
  })
  .add('Error (stackTraceLimit=0)', function () {
    const originalStackTraceLimit = Error.stackTraceLimit
    Error.stackTraceLimit = 0
    try {
      new Error('test')
    } catch (e) { }
    finally {
      Error.stackTraceLimit = originalStackTraceLimit;
    }
  })
  .add('NodeError', function () {
    try {
      new TypeError('test')
    } catch (e) { }
  })
  .add('NodeError (stackTraceLimit=0)', function () {
    const originalStackTraceLimit = Error.stackTraceLimit
    Error.stackTraceLimit = 0
    try {
      new TypeError('test')
    } catch (e) { }
    finally {
      Error.stackTraceLimit = originalStackTraceLimit;
    }
  })
  .add('NodeError Range', function () {
    try {
      new RangeError('test')
    } catch (e) { }
  })
  .add('NodeError Range (stackTraceLimit=0)', function () {
    const originalStackTraceLimit = Error.stackTraceLimit
    Error.stackTraceLimit = 0
    try {
      new RangeError('test')
    } catch (e) { }
    finally {
      Error.stackTraceLimit = originalStackTraceLimit;
    }
  })
  .run({ async: false })


Based on this assumption, maybe we can find places on Node where we can safely ignore the stackTraceLimit, using this search, I found some places:

About this issue

  • Original URL
  • State: open
  • Created 8 months ago
  • Comments: 15 (14 by maintainers)

Most upvoted comments

Agreed, the point here is that for try { ... } catch { ... }s where we do not use the error, we do not need to waste time generating the stack trace for them (afaict).