2
0
mirror of https://github.com/tenrok/BBob.git synced 2026-05-15 11:59:37 +03:00
Files
bbob/benchmark/index.js
T
Nikolay Kostyurin 772d422d77 feat(parser): rewrite lexer to make it faster (#50)
* feat(parser): first iteration of new lexer

* feat(parser): convert token string props to number props

* refactor(parser): optimize char grabber

* refactor(parser): working on new lexer

* refactor(parser): convert token string props to number props

* refactor(parser): rebuild lexer, add tag attrs parsing

* refactor(parser): rework word parsing and tag parsing

* refactor(parser): rework to pass tests

* refactor(parser): rework tag parsing

* refactor(parser): rework escape tags parsing

* refactor(parser): rework tests

* refactor(parser): all test pass

* refactor(parser): make lexer faster by move mode switching in loop

* refactor(parser): remove all state map objects

* refactor(parser): order of parsing states

* refactor(parser): state switching without return

* refactor(parser): rename buffers to chars

* refactor(lexer): reduce function calls

* feat(lexer): add new parser tests and code to pass it

* fix(utils): remove unused variable in char grabber

* feat(lexer): add test for new lexer bug

* chore(*): add lexer and lexer2 to benchmark

* chore(lexer): add some debug info for char grabber

* feat(parser): add new test for single attributes without values

* fix(lexer): paired tags tests

* refactor(lexer): comment breaking changes tests for future releases

* feat(core): improve tests

* refactor(parser): add more tests, reduce char grabber size

* refactor(parser): reduce utils size

* refactor(parser): remove unused code from tag parsing code

* refactor(parser): remove unused code from word to tag transforming code

* chore(benchmark): fix benchmark imports
2020-12-09 01:03:48 +02:00

67 lines
1.6 KiB
JavaScript
Vendored

/* eslint-disable global-require */
const Benchmark = require('benchmark');
const stub = require('./test/stub');
const suite = new Benchmark.Suite();
suite
.add('regex/parser', () => require('./test/RegexParser').parse(stub, {
ch: {
closable: true,
},
}))
.add('ya-bbcode', () => {
const Yabbcode = require('ya-bbcode');
const parser = new Yabbcode();
parser.clearTags();
parser.registerTag('ch', {
type: 'replace',
open: () => '<div>',
close: () => '</div>',
});
return parser.parse(stub);
})
.add('xbbcode/parser', () => {
const xbbcode = require('xbbcode-parser');
xbbcode.addTags({
ch: {
openTag: () => '<div>',
closeTag: () => '</div>',
restrictChildrenTo: [],
},
});
return xbbcode.process({
text: stub,
removeMisalignedTags: false,
addInLineBreaks: false,
});
})
.add('@bbob/parser lexer old', () => {
const lexer1 = require('../packages/bbob-parser/lib/lexer_old');
return require('../packages/bbob-parser/lib/index').parse(stub, {
onlyAllowTags: ['ch'],
createTokenizer: lexer1.createLexer,
});
})
.add('@bbob/parser lexer', () => {
const lexer2 = require('../packages/bbob-parser/lib/lexer');
return require('../packages/bbob-parser/lib/index').parse(stub, {
onlyAllowTags: ['ch'],
createTokenizer: lexer2.createLexer,
});
})
// add listeners
.on('cycle', (event) => {
console.log(String(event.target));
})
.on('complete', function onComplete() {
console.log(`Fastest is ${this.filter('fastest').map('name')}`);
})
// run async
.run({ async: false });