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
			| 
											3 years ago
										 | 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 }) |