这是indexloc提供的服务,不要输入任何密码
Skip to content
This repository was archived by the owner on Jan 18, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
409b81e
update framework versions
danielmenezesbr Dec 6, 2018
6462f5c
Fix for velocity 2.0
danielmenezesbr Dec 6, 2018
195775c
Fix for Thymeleaf 3
danielmenezesbr Dec 6, 2018
f6dea98
Fix code for Pebble 3
danielmenezesbr Dec 6, 2018
fbf3a5a
Azure Pipeline
danielmenezesbr Dec 7, 2018
1f487cc
Create generate-results-with-version.py
danielmenezesbr Dec 8, 2018
38529ba
Update azure-pipelines.yml
danielmenezesbr Dec 8, 2018
aa99eeb
Update benchmark.plot
danielmenezesbr Dec 8, 2018
dde1277
Update azure-pipelines.yml
danielmenezesbr Dec 8, 2018
c28f030
Update azure-pipelines.yml
danielmenezesbr Dec 8, 2018
571debe
Update azure-pipelines.yml
danielmenezesbr Dec 8, 2018
009749d
Update mustache version
danielmenezesbr Dec 9, 2018
2720cb9
Update java version
danielmenezesbr Dec 9, 2018
b0f7db4
Test two Mustache implementations (https://github.com/spullara/mustac…
danielmenezesbr Dec 9, 2018
492853f
Add Groovy BenchMark (MarkupTemplateEngine)
danielmenezesbr Dec 10, 2018
684ac27
Remove unnecessary yieldUnescaped
danielmenezesbr Dec 10, 2018
d0ba7b3
Update azure-pipelines.yml
danielmenezesbr Dec 10, 2018
91f15c5
jmh.version downgrade (1.7.1)
danielmenezesbr Dec 11, 2018
fb0451e
Update results
danielmenezesbr Dec 11, 2018
8cfbedb
Update java template engines
danielmenezesbr Dec 11, 2018
87b2e6a
jmh.version upgrade (1.21)
danielmenezesbr Dec 11, 2018
6a24de2
Show cpu info before beanchmark
danielmenezesbr Dec 11, 2018
75d3a17
Show hardware info (memory and cpu)
danielmenezesbr Dec 11, 2018
4ce2e9e
settings errorbars
danielmenezesbr Dec 12, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ target/
*.war
*.ear
.project
.idea/
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ template-benchmark
JMH benchmark for popular Java template engines:

* [Freemarker](http://freemarker.org/)
* [Mustache](https://github.com/spullara/mustache.java)
* Mustache ([spullara](https://github.com/spullara/mustache.java) and [samskivert](https://github.com/samskivert/jmustachet) implementations)
* [Pebble](http://www.mitchellbosecke.com/pebble)
* [Rocker](https://github.com/fizzed/rocker)
* [Thymeleaf](http://www.thymeleaf.org/)
* [Trimou](http://trimou.org/)
* [Velocity](http://velocity.apache.org/)
* [Groovy Template](http://groovy-lang.org/)

Running the benchmark
======================
Expand Down
52 changes: 52 additions & 0 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
jobs:
- job: Linux
timeoutInMinutes: 0
pool:
vmImage: 'Ubuntu-16.04'

steps:
- task: Maven@3
inputs:
mavenPomFile: 'pom.xml'
mavenOptions: '-Xmx3072m'
javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.8'
jdkArchitectureOption: 'x64'
publishJUnitResults: true
testResultsFiles: '**/surefire-reports/TEST-*.xml'
goals: 'package'

- script: |
cat /proc/cpuinfo; lscpu
cat /proc/meminfo; free -m
displayName: 'Show hardware info'

- script: |
less /proc/cpuinfo; lscpu
rm results.*
java -jar target/benchmarks.jar -rff results.csv -rf csv
cat results.csv
sed -i -E 's/com\.mitchellbosecke\.benchmark\.(\w+)\.benchmark/\1/g' results.csv
python generate-results-with-version.py
sed -i -E 's/Mustache_/Mustache /g' results.csv
cat results.csv
displayName: 'Exec benchmarks'


- script: sudo apt-get install -y gnuplot
displayName: 'Install gnuplot'

- script: gnuplot benchmark.plot
displayName: 'Generate results.png'

- task: CopyFiles@2
inputs:
contents: |
**/*.jar
results.*
targetFolder: '$(build.artifactStagingDirectory)'

- task: PublishBuildArtifacts@1
inputs:
artifactName: 'results'
pathToPublish: '$(build.artifactStagingDirectory)'
7 changes: 4 additions & 3 deletions benchmark.plot
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ set datafile separator ','
# Output
set terminal pngcairo enhanced font "Verdana,9"
set output 'results.png'
set grid
set grid lw 0.5
set key off
set boxwidth 0.8 relative

Expand All @@ -26,5 +26,6 @@ set style line 2 lc rgb '#808080' lt 1
set border 3 back ls 2
set tics nomirror

plot 'results.csv' every ::1 using 0:5:xticlabels(stringcolumn(1)[31:36]) with boxes ls 1,\
'results.csv' every ::1 using 0:($5 + 1500):(sprintf("%d",$5)) with labels
plot 'results.csv' every ::1 using 0:5:xticlabels(stringcolumn(1)) with boxes ls 1,\
'results.csv' every ::1 using 0:($5 + 1500):(sprintf("%d",$5)) with labels,\
'results.csv' every ::1 using 0:5:6 with yerrorbars linestyle -1 lc rgb 'black' lw 1
35 changes: 35 additions & 0 deletions generate-results-with-version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from tempfile import NamedTemporaryFile
import shutil
import csv
from xml.etree import ElementTree
import subprocess


with open('pom.xml', 'rt') as f:
groups = ElementTree.parse(f)

root = groups.getroot()
tree = root.findall('.//')
tree = tree[6].findall('.//')
versions = {}
for node in tree:
key = node.tag[node.tag.index("}") + 1:]
versions[key] = node.text

filename = 'results.csv'
tempfile = NamedTemporaryFile(mode='w', delete=False)

fields = ['Benchmark', 'Mode', 'Threads', 'Samples', 'Score', 'Score Error (99.9%)', 'Unit']

with open(filename, 'r') as csvfile:#, tempfile:
reader = csv.DictReader(csvfile, fieldnames=fields, delimiter=',')
writer = csv.DictWriter(tempfile, fieldnames=fields)
for row in reader:
if row['Benchmark'] != 'Benchmark':
key = "%s.version" % (row['Benchmark'].lower())
version = versions[key]
row['Benchmark'] = row['Benchmark'] + " " + version
writer.writerow(row)

shutil.move(tempfile.name, filename)
exit()
38 changes: 25 additions & 13 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,19 @@

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jmh.version>1.7.1</jmh.version>
<jmh.version>1.21</jmh.version>
<uberjar.name>benchmarks</uberjar.name>

<pebble.version>1.5.2</pebble.version>
<mustache.version>0.9.0</mustache.version>
<freemarker.version>2.3.22</freemarker.version>
<velocity.version>1.7</velocity.version>
<thymeleaf.version>2.1.4.RELEASE</thymeleaf.version>
<pebble.version>3.0.6</pebble.version>
<mustache_samskivert.version>1.14</mustache_samskivert.version>
<mustache_spullara.version>0.9.5</mustache_spullara.version>
<freemarker.version>2.3.28</freemarker.version>
<velocity.version>2.0</velocity.version>
<thymeleaf.version>3.0.11.RELEASE</thymeleaf.version>
<junit.version>4.11</junit.version>
<trimou.version>1.8.1.Final</trimou.version>
<rocker.version>0.9.0</rocker.version>
<trimou.version>2.5.0.Final</trimou.version>
<rocker.version>1.2.0</rocker.version>
<groovy.version>2.5.4</groovy.version>
</properties>

<licenses>
Expand All @@ -46,8 +48,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
Expand Down Expand Up @@ -120,14 +122,19 @@

<!-- template engines -->
<dependency>
<groupId>com.mitchellbosecke</groupId>
<groupId>io.pebbletemplates</groupId>
<artifactId>pebble</artifactId>
<version>${pebble.version}</version>
</dependency>
<dependency>
<groupId>com.samskivert</groupId>
<artifactId>jmustache</artifactId>
<version>${mustache_samskivert.version}</version>
</dependency>
<dependency>
<groupId>com.github.spullara.mustache.java</groupId>
<artifactId>compiler</artifactId>
<version>${mustache.version}</version>
<version>${mustache_spullara.version}</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
Expand All @@ -136,7 +143,7 @@
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<artifactId>velocity-engine-core</artifactId>
<version>${velocity.version}</version>
</dependency>
<dependency>
Expand All @@ -154,6 +161,11 @@
<artifactId>rocker-runtime</artifactId>
<version>${rocker.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-templates</artifactId>
<version>${groovy.version}</version>
</dependency>

<dependency>
<groupId>junit</groupId>
Expand Down
18 changes: 10 additions & 8 deletions results.csv
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
"Benchmark","Mode","Threads","Samples","Score","Score Error (99.9%)","Unit"
"com.mitchellbosecke.benchmark.Freemarker.benchmark","thrpt",1,50.000000,16737.333340,184.040944,"ops/s"
"com.mitchellbosecke.benchmark.Mustache.benchmark","thrpt",1,50.000000,23393.115757,159.003408,"ops/s"
"com.mitchellbosecke.benchmark.Pebble.benchmark","thrpt",1,50.000000,35736.995844,248.860050,"ops/s"
"com.mitchellbosecke.benchmark.Rocker.benchmark","thrpt",1,50.000000,41123.645420,191.949947,"ops/s"
"com.mitchellbosecke.benchmark.Thymeleaf.benchmark","thrpt",1,50.000000,1519.092213,18.156292,"ops/s"
"com.mitchellbosecke.benchmark.Trimou.benchmark","thrpt",1,50.000000,19081.925071,112.440326,"ops/s"
"com.mitchellbosecke.benchmark.Velocity.benchmark","thrpt",1,50.000000,21553.362499,223.035824,"ops/s"
Benchmark,Mode,Threads,Samples,Score,Score Error (99.9%),Unit
Freemarker 2.3.28,thrpt,1,50,14375.008770,67.949534,ops/s
Groovy 2.5.4,thrpt,1,50,9916.720420,310.450084,ops/s
Mustache Samskivert 1.14,thrpt,1,50,9756.638916,201.174622,ops/s
Mustache Spullara 0.9.5,thrpt,1,50,16561.498801,51.512659,ops/s
Pebble 3.0.6,thrpt,1,50,19575.873030,372.340451,ops/s
Rocker 1.2.0,thrpt,1,50,29665.500272,326.030892,ops/s
Thymeleaf 3.0.11.RELEASE,thrpt,1,50,4547.712767,44.024793,ops/s
Trimou 2.5.0.Final,thrpt,1,50,16102.162324,207.259233,ops/s
Velocity 2.0,thrpt,1,50,16435.810422,124.612788,ops/s
Binary file modified results.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
58 changes: 58 additions & 0 deletions src/main/java/com/mitchellbosecke/benchmark/Groovy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.mitchellbosecke.benchmark;

import groovy.lang.Writable;
import groovy.text.Template;
import groovy.text.markup.MarkupTemplateEngine;
import groovy.text.markup.TemplateConfiguration;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Setup;

import java.io.*;
import java.util.Map;

public class Groovy extends BaseBenchmark {

private Map<String, Object> context;

private Template template;

@Setup
public void setup() {
TemplateConfiguration config = new TemplateConfiguration();
config.setAutoEscape(false);
config.setUseDoubleQuotes(true);
MarkupTemplateEngine engine = new MarkupTemplateEngine(config);
InputStream is = this.getClass().getClassLoader()
.getResourceAsStream("templates/stocks.groovy.tpl");
Reader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(is, "UTF8"));
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException(e);
}

try {
template = engine.createTemplate(reader);
} catch (ClassNotFoundException e) {
throw new IllegalStateException(e);
} catch (IOException e) {
throw new IllegalStateException(e);
}


this.context = getContext();
}

@Benchmark
public String benchmark() {
Writer writer = new StringWriter();
Writable output = template.make(context);
try {
output.writeTo(writer);
} catch (IOException e) {
throw new IllegalStateException(e);
}
return writer.toString();
}

}
Loading