2010-06-23 7 views
4

내 웹 응용 프로그램의보기 레이어로 StringTemplate을 사용하고 있습니다. 최근에 페이지 렌더링에 소요 된 시간을 측정했으며 간단한 페이지의 경우 약 50ms이고 복잡한 페이지의 경우 약 500ms입니다. 이것은 내 요구에 너무 많은 부분이므로 ST의 성능을 향상시킬 방법을 찾고 있습니다. 어떻게해야합니까?왜 StringTemplate이 느려질 수 있습니까?

대부분의 시간은 StringTemplate.toString 메서드에 의해 소비되므로 캐시 문제가 아닙니다.

저는 익명의 템플릿과 포함 된 템플릿을 적극적으로 사용합니다. 이것이 원인 일 수 있습니까?

+0

캐시에 문제가 있습니까? 결과 문자열을 캐시하면 어떨까요? –

+0

이것은 일시적으로 문제를 해결하기 위해 수행 할 계획이지만 빠른보기 엔진을 캐싱하는 것이 좋습니다. – Fixpoint

+0

@Fixpoint : ST 벤치마킹에 사용하는 소스 코드를 게시 할 수 있습니까? –

답변

4

write()가 toString이 아닌 스트림을 쓰는 것입니다. write()는 w/o 버퍼링을 렌더링하고 전송합니다. 큰 차이. Ter

+0

설명해 주시겠습니까? 현재 나는 이것을하고있다 :'response.getWriter(). print (template);' – Fixpoint

+0

나는'template.write (새로운 AutoIndentWriter (response.getWriter()))'를 시도했다. – Fixpoint

+0

정말요? 대형 템플릿에서 큰 차이를 만드는 Java 버전의 경우. –

1

테렌스 파?

나는 무엇 테렌스 의미하는 것은 내가 눈에 띄는 차이를 만들 것을 beieve 수 없습니다 그러나

template.write(new AutoIndentWriter(response.getWriter())); 

생각합니다. 당신은 두 가지 별도

String str = template.toString(); // 1 
response.getWriter().print(str); // 2 

속도 저하가 IO를 포함 2 줄에 아마 시간이해야

.

+1

방금 ​​(1)과 (2)를 측정했습니다. 불행히도 문제는'toString'에 있습니다; 'print'는 거의 시간이 걸리지 않습니다. – Fixpoint

1

사용하는 경우 toString() 메모리가 커질 수 있습니다.

로드 테스트를 실행할 때 toString() 경우를 확인하십시오.

메모리가 충분하면. 두 경우는 같은 시간입니다.

관련 문제