deb-python-misaka/benchmark/benchmark.py

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)