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.
		
		
		
		
		
			
		
			
				
					176 lines
				
				3.2 KiB
			
		
		
			
		
	
	
					176 lines
				
				3.2 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const benchmark = require('benchmark') | ||
|  | const suite = new benchmark.Suite() | ||
|  | 
 | ||
|  | const schema = { | ||
|  |   title: 'Example Schema', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     firstName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     lastName: { | ||
|  |       type: ['string', 'null'] | ||
|  |     }, | ||
|  |     age: { | ||
|  |       description: 'Age in years', | ||
|  |       type: 'integer', | ||
|  |       minimum: 0 | ||
|  |     } | ||
|  |   } | ||
|  | } | ||
|  | const schemaCJS = { | ||
|  |   title: 'Example Schema', | ||
|  |   type: 'object', | ||
|  |   properties: { | ||
|  |     firstName: { | ||
|  |       type: 'string' | ||
|  |     }, | ||
|  |     lastName: { | ||
|  |       type: ['string', 'null'] | ||
|  |     }, | ||
|  |     age: { | ||
|  |       description: 'Age in years', | ||
|  |       type: 'number', | ||
|  |       minimum: 0 | ||
|  |     } | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | const arraySchema = { | ||
|  |   title: 'array schema', | ||
|  |   type: 'array', | ||
|  |   items: schema | ||
|  | } | ||
|  | 
 | ||
|  | const arraySchemaCJS = { | ||
|  |   title: 'array schema', | ||
|  |   type: 'array', | ||
|  |   items: schemaCJS | ||
|  | } | ||
|  | 
 | ||
|  | const dateFormatSchema = { | ||
|  |   description: 'Date of birth', | ||
|  |   type: 'string', | ||
|  |   format: 'date' | ||
|  | } | ||
|  | 
 | ||
|  | const dateFormatSchemaCJS = { | ||
|  |   description: 'Date of birth', | ||
|  |   type: 'string', | ||
|  |   format: 'date' | ||
|  | } | ||
|  | 
 | ||
|  | const obj = { | ||
|  |   firstName: 'Matteo', | ||
|  |   lastName: 'Collina', | ||
|  |   age: 32 | ||
|  | } | ||
|  | 
 | ||
|  | const date = new Date() | ||
|  | 
 | ||
|  | const multiArray = [] | ||
|  | 
 | ||
|  | const CJS = require('compile-json-stringify') | ||
|  | const CJSStringify = CJS(schemaCJS) | ||
|  | const CJSStringifyArray = CJS(arraySchemaCJS) | ||
|  | const CJSStringifyDate = CJS(dateFormatSchemaCJS) | ||
|  | const CJSStringifyString = CJS({ type: 'string' }) | ||
|  | 
 | ||
|  | const FJS = require('.') | ||
|  | const stringify = FJS(schema) | ||
|  | const stringifyArray = FJS(arraySchema) | ||
|  | const stringifyDate = FJS(dateFormatSchema) | ||
|  | const stringifyString = FJS({ type: 'string' }) | ||
|  | let str = '' | ||
|  | 
 | ||
|  | // eslint-disable-next-line
 | ||
|  | for (var i = 0; i < 10000; i++) { | ||
|  |   str += i | ||
|  |   if (i % 100 === 0) { | ||
|  |     str += '"' | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | Number(str) | ||
|  | 
 | ||
|  | for (i = 0; i < 1000; i++) { | ||
|  |   multiArray.push(obj) | ||
|  | } | ||
|  | 
 | ||
|  | suite.add('FJS creation', function () { | ||
|  |   FJS(schema) | ||
|  | }) | ||
|  | suite.add('CJS creation', function () { | ||
|  |   CJS(schemaCJS) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('JSON.stringify array', function () { | ||
|  |   JSON.stringify(multiArray) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('fast-json-stringify array', function () { | ||
|  |   stringifyArray(multiArray) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('compile-json-stringify array', function () { | ||
|  |   CJSStringifyArray(multiArray) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('JSON.stringify long string', function () { | ||
|  |   JSON.stringify(str) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('fast-json-stringify long string', function () { | ||
|  |   stringifyString(str) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('compile-json-stringify long string', function () { | ||
|  |   CJSStringifyString(str) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('JSON.stringify short string', function () { | ||
|  |   JSON.stringify('hello world') | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('fast-json-stringify short string', function () { | ||
|  |   stringifyString('hello world') | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('compile-json-stringify short string', function () { | ||
|  |   CJSStringifyString('hello world') | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('JSON.stringify obj', function () { | ||
|  |   JSON.stringify(obj) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('fast-json-stringify obj', function () { | ||
|  |   stringify(obj) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('compile-json-stringify obj', function () { | ||
|  |   CJSStringify(obj) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('JSON stringify date', function () { | ||
|  |   JSON.stringify(date) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('fast-json-stringify date format', function () { | ||
|  |   stringifyDate(date) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.add('compile-json-stringify date format', function () { | ||
|  |   CJSStringifyDate(date) | ||
|  | }) | ||
|  | 
 | ||
|  | suite.on('cycle', cycle) | ||
|  | 
 | ||
|  | suite.run() | ||
|  | 
 | ||
|  | function cycle (e) { | ||
|  |   console.log(e.target.toString()) | ||
|  | } |