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())
							 | 
						||
| 
								 | 
							
								}
							 |