mirror of
https://github.com/yuin/goldmark
synced 2025-03-04 23:04:52 +00:00
Copied from #20
This commit is contained in:
parent
3190eb8348
commit
b067a12f6b
1 changed files with 63 additions and 37 deletions
|
|
@ -5,53 +5,79 @@ import (
|
|||
"io/ioutil"
|
||||
"testing"
|
||||
|
||||
gomarkdown "github.com/gomarkdown/markdown"
|
||||
"github.com/yuin/goldmark"
|
||||
"github.com/yuin/goldmark/renderer/html"
|
||||
|
||||
"gitlab.com/golang-commonmark/markdown"
|
||||
|
||||
"gopkg.in/russross/blackfriday.v2"
|
||||
bf1 "github.com/russross/blackfriday"
|
||||
bf2 "github.com/russross/blackfriday/v2"
|
||||
)
|
||||
|
||||
func BenchmarkGoldMark(b *testing.B) {
|
||||
b.ResetTimer()
|
||||
source, err := ioutil.ReadFile("_data.md")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
func BenchmarkMarkdown(b *testing.B) {
|
||||
b.Run("Blackfriday-v1", func(b *testing.B) {
|
||||
r := func(src []byte) ([]byte, error) {
|
||||
out := bf1.MarkdownBasic(src)
|
||||
return out, nil
|
||||
}
|
||||
doBenchmark(b, r)
|
||||
})
|
||||
|
||||
b.Run("Blackfriday-v2", func(b *testing.B) {
|
||||
r := func(src []byte) ([]byte, error) {
|
||||
out := bf2.Run(src)
|
||||
return out, nil
|
||||
}
|
||||
doBenchmark(b, r)
|
||||
})
|
||||
|
||||
b.Run("GoldMark", func(b *testing.B) {
|
||||
markdown := goldmark.New(
|
||||
goldmark.WithRendererOptions(html.WithXHTML(), html.WithUnsafe()),
|
||||
)
|
||||
r := func(src []byte) ([]byte, error) {
|
||||
var out bytes.Buffer
|
||||
markdown.Convert([]byte(""), &out)
|
||||
err := markdown.Convert(src, &out)
|
||||
return out.Bytes(), err
|
||||
}
|
||||
doBenchmark(b, r)
|
||||
})
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
out.Reset()
|
||||
if err := markdown.Convert(source, &out); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkGolangCommonMark(b *testing.B) {
|
||||
b.ResetTimer()
|
||||
source, err := ioutil.ReadFile("_data.md")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
b.Run("CommonMark", func(b *testing.B) {
|
||||
md := markdown.New(markdown.XHTMLOutput(true))
|
||||
for i := 0; i < b.N; i++ {
|
||||
md.RenderToString(source)
|
||||
r := func(src []byte) ([]byte, error) {
|
||||
var out bytes.Buffer
|
||||
err := md.Render(&out, src)
|
||||
return out.Bytes(), err
|
||||
}
|
||||
doBenchmark(b, r)
|
||||
})
|
||||
|
||||
b.Run("GoMarkdown", func(b *testing.B) {
|
||||
r := func(src []byte) ([]byte, error) {
|
||||
out := gomarkdown.ToHTML(src, nil, nil)
|
||||
return out, nil
|
||||
}
|
||||
doBenchmark(b, r)
|
||||
})
|
||||
}
|
||||
|
||||
func BenchmarkBlackFriday(b *testing.B) {
|
||||
b.ResetTimer()
|
||||
// The different frameworks have different APIs. Create an adapter that
|
||||
// should behave the same in the memory department.
|
||||
func doBenchmark(b *testing.B, render func(src []byte) ([]byte, error)) {
|
||||
b.StopTimer()
|
||||
source, err := ioutil.ReadFile("_data.md")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
b.Fatal(err)
|
||||
}
|
||||
b.StartTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
blackfriday.Run(source)
|
||||
out, err := render(source)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
if len(out) < 100 {
|
||||
b.Fatal("No result")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue