You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							138 lines
						
					
					
						
							4.7 KiB
						
					
					
				
			
		
		
	
	
							138 lines
						
					
					
						
							4.7 KiB
						
					
					
				| const Benchmark = require('benchmark')
 | |
| const suite = new Benchmark.Suite()
 | |
| const { inspect } = require('util')
 | |
| const jsonStringifySafe = require('json-stringify-safe')
 | |
| const fastSafeStringify = require('./')
 | |
| 
 | |
| const array = new Array(10).fill(0).map((_, i) => i)
 | |
| const obj = { foo: array }
 | |
| const circ = JSON.parse(JSON.stringify(obj))
 | |
| circ.o = { obj: circ, array }
 | |
| const circGetters = JSON.parse(JSON.stringify(obj))
 | |
| Object.assign(circGetters, { get o () { return { obj: circGetters, array } } })
 | |
| 
 | |
| const deep = require('./package.json')
 | |
| deep.deep = JSON.parse(JSON.stringify(deep))
 | |
| deep.deep.deep = JSON.parse(JSON.stringify(deep))
 | |
| deep.deep.deep.deep = JSON.parse(JSON.stringify(deep))
 | |
| deep.array = array
 | |
| 
 | |
| const deepCirc = JSON.parse(JSON.stringify(deep))
 | |
| deepCirc.deep.deep.deep.circ = deepCirc
 | |
| deepCirc.deep.deep.circ = deepCirc
 | |
| deepCirc.deep.circ = deepCirc
 | |
| deepCirc.array = array
 | |
| 
 | |
| const deepCircGetters = JSON.parse(JSON.stringify(deep))
 | |
| for (let i = 0; i < 10; i++) {
 | |
|   deepCircGetters[i.toString()] = {
 | |
|     deep: {
 | |
|       deep: {
 | |
|         get circ () { return deep.deep },
 | |
|         deep: { get circ () { return deep.deep.deep } }
 | |
|       },
 | |
|       get circ () { return deep }
 | |
|     },
 | |
|     get array () { return array }
 | |
|   }
 | |
| }
 | |
| 
 | |
| const deepCircNonCongifurableGetters = JSON.parse(JSON.stringify(deep))
 | |
| Object.defineProperty(deepCircNonCongifurableGetters.deep.deep.deep, 'circ', {
 | |
|   get: () => deepCircNonCongifurableGetters,
 | |
|   enumerable: true,
 | |
|   configurable: false
 | |
| })
 | |
| Object.defineProperty(deepCircNonCongifurableGetters.deep.deep, 'circ', {
 | |
|   get: () => deepCircNonCongifurableGetters,
 | |
|   enumerable: true,
 | |
|   configurable: false
 | |
| })
 | |
| Object.defineProperty(deepCircNonCongifurableGetters.deep, 'circ', {
 | |
|   get: () => deepCircNonCongifurableGetters,
 | |
|   enumerable: true,
 | |
|   configurable: false
 | |
| })
 | |
| Object.defineProperty(deepCircNonCongifurableGetters, 'array', {
 | |
|   get: () => array,
 | |
|   enumerable: true,
 | |
|   configurable: false
 | |
| })
 | |
| 
 | |
| suite.add('util.inspect:          simple object                 ', function () {
 | |
|   inspect(obj, { showHidden: false, depth: null })
 | |
| })
 | |
| suite.add('util.inspect:          circular                      ', function () {
 | |
|   inspect(circ, { showHidden: false, depth: null })
 | |
| })
 | |
| suite.add('util.inspect:          circular getters              ', function () {
 | |
|   inspect(circGetters, { showHidden: false, depth: null })
 | |
| })
 | |
| suite.add('util.inspect:          deep                          ', function () {
 | |
|   inspect(deep, { showHidden: false, depth: null })
 | |
| })
 | |
| suite.add('util.inspect:          deep circular                 ', function () {
 | |
|   inspect(deepCirc, { showHidden: false, depth: null })
 | |
| })
 | |
| suite.add('util.inspect:          large deep circular getters   ', function () {
 | |
|   inspect(deepCircGetters, { showHidden: false, depth: null })
 | |
| })
 | |
| suite.add('util.inspect:          deep non-conf circular getters', function () {
 | |
|   inspect(deepCircNonCongifurableGetters, { showHidden: false, depth: null })
 | |
| })
 | |
| 
 | |
| suite.add('\njson-stringify-safe:   simple object                 ', function () {
 | |
|   jsonStringifySafe(obj)
 | |
| })
 | |
| suite.add('json-stringify-safe:   circular                      ', function () {
 | |
|   jsonStringifySafe(circ)
 | |
| })
 | |
| suite.add('json-stringify-safe:   circular getters              ', function () {
 | |
|   jsonStringifySafe(circGetters)
 | |
| })
 | |
| suite.add('json-stringify-safe:   deep                          ', function () {
 | |
|   jsonStringifySafe(deep)
 | |
| })
 | |
| suite.add('json-stringify-safe:   deep circular                 ', function () {
 | |
|   jsonStringifySafe(deepCirc)
 | |
| })
 | |
| suite.add('json-stringify-safe:   large deep circular getters   ', function () {
 | |
|   jsonStringifySafe(deepCircGetters)
 | |
| })
 | |
| suite.add('json-stringify-safe:   deep non-conf circular getters', function () {
 | |
|   jsonStringifySafe(deepCircNonCongifurableGetters)
 | |
| })
 | |
| 
 | |
| suite.add('\nfast-safe-stringify:   simple object                 ', function () {
 | |
|   fastSafeStringify(obj)
 | |
| })
 | |
| suite.add('fast-safe-stringify:   circular                      ', function () {
 | |
|   fastSafeStringify(circ)
 | |
| })
 | |
| suite.add('fast-safe-stringify:   circular getters              ', function () {
 | |
|   fastSafeStringify(circGetters)
 | |
| })
 | |
| suite.add('fast-safe-stringify:   deep                          ', function () {
 | |
|   fastSafeStringify(deep)
 | |
| })
 | |
| suite.add('fast-safe-stringify:   deep circular                 ', function () {
 | |
|   fastSafeStringify(deepCirc)
 | |
| })
 | |
| suite.add('fast-safe-stringify:   large deep circular getters   ', function () {
 | |
|   fastSafeStringify(deepCircGetters)
 | |
| })
 | |
| suite.add('fast-safe-stringify:   deep non-conf circular getters', function () {
 | |
|   fastSafeStringify(deepCircNonCongifurableGetters)
 | |
| })
 | |
| 
 | |
| // add listeners
 | |
| suite.on('cycle', function (event) {
 | |
|   console.log(String(event.target))
 | |
| })
 | |
| 
 | |
| suite.on('complete', function () {
 | |
|   console.log('\nFastest is ' + this.filter('fastest').map('name'))
 | |
| })
 | |
| 
 | |
| suite.run({ delay: 1, minSamples: 150 })
 |