템플릿 프레임 워크를 평가하려고합니다. 간단한 성능 테스트에 대한Velocity 및 Mvel과 비교하여 Stringtemplate의 성능이 낮습니다
나는 이러한 템플릿
private static String mvelTemplate = "Hello, my name is @{name},"
+ " @foreach{user : group.users} - @{user.id} - @{user.name} "
+ " @end{}";
private static String velocityTemplate = "Hello, my name is ${name},"
+ "#foreach($user in $group.users) - ${user.id} - ${user.name} #end " ;
private static String stringTemplate = "Hello, my name is <name>,"
+ "<group.users:{x| - <x.id> - <x.name>}> ";
// the group has 20 users
// 'Java' uses plain StringBuffer
Stringtemplate의 일부가
ST st = new ST(stringTemplate);
for (Map.Entry<String, Object> entry : vars.entrySet()) {
st.add(entry.getKey(),entry.getValue());
}
start = System.currentTimeMillis();
for (int n = 0; n < 10000; n ++) {
st.render();
}
end = System.currentTimeMillis();
입니다 그리고 난 아무 생각이 없기 때문에 결과가
Mvel.Compiled elapsed:68ms. ~147K per second
Velocity Cache elapsed:183ms. ~54K per second
StringTemplate elapsed:234ms. ~42K per second
Java elapsed:21ms. ~476K per second
이다를 사용하고 있습니다 문자열 템플릿의 질문은 다음과 같습니다.
StringTemplate이 실제로 그렇게 느리거나 템플릿을 렌더링하는 다른 (더 빠른) 방법이 있습니다.
이 업데이트 :
가 바르은 다음과 같습니다
Map<String,Object> vars = new HashMap<String,Object>();
Group g = new Group("group1");
for (int i = 0; i < 20; i++) {
g.addUser(new User(i, "user" + i));
}
vars.put("group", g);
vars.put("name", "john");
템플릿 당 1.000.000 반복과 지금
전체 벤치 마크 루프 10 배
당신이 무엇을Mvel.Compiled elapsed:7056ms. ~141K per second
Velocity Cache elapsed:18239ms. ~54K per second
StringTemplate elapsed:22926ms. ~43K per second
Java elapsed:2182ms. ~458K per second
안녕. group.users는 st.add (entry.getKey(), entry.getValue())를 사용하지 않습니다. 그거야? vars가 얼마나 큰가요? –
vars의 크기는 2입니다. 1. 사용자가 20 명인 단일 그룹 "그룹". 및 "이름" "값"쌍 – kromit