121 lines
3.1 KiB
Python
121 lines
3.1 KiB
Python
# coding: utf-8
|
|
# Source: https://github.com/lepture/mistune/blob/master/tests/bench.py
|
|
|
|
import os
|
|
import time
|
|
import functools
|
|
|
|
|
|
class benchmark(object):
|
|
suites = []
|
|
|
|
def __init__(self, name):
|
|
self._name = name
|
|
|
|
def __call__(self, func):
|
|
@functools.wraps(func)
|
|
def wrapper(text, loops=1000):
|
|
start = time.clock()
|
|
while loops:
|
|
func(text)
|
|
loops -= 1
|
|
end = time.clock()
|
|
return end - start
|
|
# register
|
|
benchmark.suites.append((self._name, wrapper))
|
|
return wrapper
|
|
|
|
@classmethod
|
|
def bench(cls, text, loops=1000):
|
|
print('Parsing the Markdown Syntax document %d times...' % loops)
|
|
for name, func in cls.suites:
|
|
try:
|
|
total = func(text, loops=loops)
|
|
print('{0}: {1}'.format(name, total))
|
|
except ImportError:
|
|
print('{0} is not available'.format(name))
|
|
|
|
|
|
# @benchmark('mistune')
|
|
# def benchmark_mistune(text):
|
|
# import mistune
|
|
# mistune.markdown(text)
|
|
|
|
|
|
@benchmark('misaka')
|
|
def benchmark_misaka(text):
|
|
import misaka as m
|
|
# mistune has all these features
|
|
# extensions = (
|
|
# m.EXT_NO_INTRA_EMPHASIS | m.EXT_FENCED_CODE | m.EXT_AUTOLINK |
|
|
# m.EXT_TABLES | m.EXT_STRIKETHROUGH
|
|
# )
|
|
# md = m.Markdown(m.HtmlRenderer(), extensions=extensions)
|
|
# md.render(text)
|
|
|
|
m.html(text, ('no-intra-emphasis', 'fenced=code', 'autolink', 'tables', 'strikethrough'))
|
|
|
|
|
|
@benchmark('misaka_classes')
|
|
def benchmark_misaka_classes(text):
|
|
import misaka as m
|
|
# mistune has all these features
|
|
# extensions = (
|
|
# m.EXT_NO_INTRA_EMPHASIS | m.EXT_FENCED_CODE | m.EXT_AUTOLINK |
|
|
# m.EXT_TABLES | m.EXT_STRIKETHROUGH
|
|
# )
|
|
# # md = m.Markdown(m.HtmlRenderer(), extensions=extensions)
|
|
# # md.render(text)
|
|
|
|
# m.html(text, extensions)
|
|
|
|
r = m.HtmlRenderer()
|
|
p = m.Markdown(r, ('no-intra-emphasis', 'fenced=code', 'autolink', 'tables', 'strikethrough'))
|
|
p(text)
|
|
|
|
|
|
# @benchmark('markdown2')
|
|
# def benchmark_markdown2(text):
|
|
# import markdown2
|
|
# extras = ['code-friendly', 'fenced-code-blocks', 'footnotes']
|
|
# markdown2.markdown(text, extras=extras)
|
|
|
|
|
|
# @benchmark('markdown')
|
|
# def benchmark_markdown(text):
|
|
# import markdown
|
|
# markdown.markdown(text, ['extra'])
|
|
|
|
|
|
# @benchmark('cMarkdown')
|
|
# def benchmark_cMarkdown(text):
|
|
# import cMarkdown
|
|
# cMarkdown.markdown(text)
|
|
|
|
|
|
# @benchmark('discount')
|
|
# def benchmark_discount(text):
|
|
# import discount
|
|
# discount.Markdown(text).get_html_content()
|
|
|
|
|
|
@benchmark('hoep')
|
|
def benchmark_hoep(text):
|
|
import hoep as m
|
|
# mistune has all these features
|
|
extensions = (
|
|
m.EXT_NO_INTRA_EMPHASIS | m.EXT_FENCED_CODE | m.EXT_AUTOLINK |
|
|
m.EXT_TABLES | m.EXT_STRIKETHROUGH | m.EXT_FOOTNOTES
|
|
)
|
|
md = m.Hoep(extensions=extensions)
|
|
md.render(text)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
root = os.path.dirname(__file__)
|
|
filepath = os.path.join(root, 'markdown-syntax.md')
|
|
with open(filepath, 'r') as f:
|
|
text = f.read()
|
|
|
|
benchmark.bench(text)
|