Prepare ship for ludicrous speed.
Make sure to eat extra newlines at the end of certain block rules. This avoids an extra iteration for `space` tokens. Marked is now roughly 97% or 98% the speed of Discount.
This commit is contained in:
parent
ac880f0b79
commit
5f7edf47ed
14
README.md
14
README.md
@ -19,15 +19,15 @@ node v0.6.x
|
|||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
$ node test --bench
|
$ node test --bench
|
||||||
marked completed in 7904ms.
|
marked completed in 7303ms.
|
||||||
marked (with gfm) completed in 8947ms.
|
marked (with gfm) completed in 8206ms.
|
||||||
discount completed in 7171ms.
|
discount completed in 7170ms.
|
||||||
showdown (reuse converter) completed in 15729ms.
|
showdown (reuse converter) completed in 15865ms.
|
||||||
showdown (new converter) completed in 18149ms.
|
showdown (new converter) completed in 18140ms.
|
||||||
markdown-js completed in 24521ms.
|
markdown-js completed in 24357ms.
|
||||||
```
|
```
|
||||||
|
|
||||||
__Marked is now only ~700ms behind Discount (which is written in C).__
|
__Marked is now only ~130ms behind Discount, which is written in C.__
|
||||||
|
|
||||||
For those feeling skeptical: These benchmarks run the entire markdown test suite
|
For those feeling skeptical: These benchmarks run the entire markdown test suite
|
||||||
1000 times. The test suite tests every feature. It doesn't cater to specific
|
1000 times. The test suite tests every feature. It doesn't cater to specific
|
||||||
|
@ -11,13 +11,13 @@
|
|||||||
|
|
||||||
var block = {
|
var block = {
|
||||||
newline: /^\n+/,
|
newline: /^\n+/,
|
||||||
code: /^ {4,}[^\n]*(?:\n {4,}[^\n]*|\n)*(?=\n| *$)/,
|
code: /^ {4,}[^\n]*(?:\n {4,}[^\n]*|\n)*(?:\n+| *$)/,
|
||||||
gfm_code: /^ *``` *(\w+)? *\n([^\0]+?)\s*```(?= *\n| *$)/,
|
gfm_code: /^ *``` *(\w+)? *\n([^\0]+?)\s*```(?: *\n+| *$)/,
|
||||||
hr: /^( *[\-*_]){3,} *\n/,
|
hr: /^( *[\-*_]){3,} *\n+/,
|
||||||
heading: /^ *(#{1,6}) *([^\0]+?) *#* *\n+/,
|
heading: /^ *(#{1,6}) *([^\0]+?) *#* *\n+/,
|
||||||
lheading: /^([^\n]+)\n *(=|-){3,}/,
|
lheading: /^([^\n]+)\n *(=|-){3,} *\n*/,
|
||||||
blockquote: /^( *>[^\n]+(\n[^\n]+)*)+/,
|
blockquote: /^( *>[^\n]+(\n[^\n]+)*)+\n*/,
|
||||||
list: /^( *)([*+-]|\d+\.) [^\0]+?(?:\n{2,}(?! )|\s*$)(?!\1bullet)/,
|
list: /^( *)([*+-]|\d+\.) [^\0]+?(?:\n{2,}(?! )|\s*$)(?!\1bullet)\n*/,
|
||||||
html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,
|
html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,
|
||||||
paragraph: /^([^\n]+\n?(?!body))+\n*/,
|
paragraph: /^([^\n]+\n?(?!body))+\n*/,
|
||||||
text: /^[^\n]+/
|
text: /^[^\n]+/
|
||||||
@ -27,7 +27,7 @@ block.list = (function() {
|
|||||||
var list = block.list.source;
|
var list = block.list.source;
|
||||||
|
|
||||||
list = list
|
list = list
|
||||||
.replace('bullet', /(?:[*+-](?!( *[-*]){2,})|\d+\.)/.source)
|
.replace('bullet', /(?:[*+-](?!(?: *[-*]){2,})|\d+\.)/.source);
|
||||||
|
|
||||||
return new RegExp(list);
|
return new RegExp(list);
|
||||||
})();
|
})();
|
||||||
@ -121,9 +121,7 @@ block.token = function(str, tokens, top) {
|
|||||||
cap = cap[0].replace(/^ {4}/gm, '');
|
cap = cap[0].replace(/^ {4}/gm, '');
|
||||||
tokens.push({
|
tokens.push({
|
||||||
type: 'code',
|
type: 'code',
|
||||||
text: cap[cap.length-1] === '\n'
|
text: cap.replace(/\n+$/, '')
|
||||||
? cap.slice(0, -1)
|
|
||||||
: cap
|
|
||||||
});
|
});
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user