2010-02-25 3 views
9

웹 사이트 템플릿에 Apache Velocity를 사용하고 있으며 일부는 복잡해지고 있습니다. 특정 Velocity 기능의 성능 문제를 알아 봤습니까? 그리고 어떻게 그들 주위에 있었습니까?Apache Velocity 성능 함정?

+4

의심이가는 경우 프로필을 작성하십시오. 프로파일 러 사용. 추측 할 필요가 없습니다. – skaffman

답변

6

사람들이 종종 간과하는 가장 중요한 기능은 성능을 상당히 향상시키는 리소스 로더 캐싱 (기본적으로 꺼짐)입니다 (file.resource.loader.cache).

#parse 지시어도 성능에 현저한 영향을 미치지 만 템플릿을 논리적 부분으로 분할하는 것만이 아니라 코드 중복을 피하기 위해 사용하십시오.

템플릿이 로직면에서 상당히 복잡해지면 해당 로직을 컨트롤러로 옮기고 데이터 구조를 렌더링 할 준비가 된 템플릿을 제공 할 수 있습니다.

Velocity에서 성능 저하를 발견하지 못했습니다. JSP에서 전환하기 전에 Velocity 속도를 테스트했을 때, 내가 버린 템플릿에서 지속적으로 50 % 더 빠릅니다. 현재 우리는 Velocity 템플릿에서 렌더링 된 수천 페이지의 사이트를 생성하며 번개처럼 빠르고 성능에 매우 만족합니다.

+0

루프 외부에서 매번 동일한 값을 생성하는 Java 코드로 호출을 이동하면 성능이 향상 될 수 있습니다. 이것은 내 상황에서 도움이되는 것처럼 보였다. Java의 Hotspot 컴파일러는 Java 코드에이 작업을 수행합니다. Velocity 엔진에이 기능이 있는지 확실하지 않습니다. –

10

먼저 최신 속도 라이브러리 (1.7 또는 1.6.4)를 사용하십시오. 버전 1.5에는 심각한 성능 문제가 포함되어 있습니다.

또한 여기 당신이 생산 환경을 조정할 수 있어야합니다 매개 변수의 목록은 다음과 같습니다

  1. velocimacro.library.autoreload을 - 거짓
  2. file.resource로 설정해야합니다. loader.cache - 으로 설정해야합니다.
  3. fi le.resource.loader.modificationCheckInterval이 - 기본값이 충분한 크기가 아닌 경우 증가한다 -1
  4. parser.pool.size로 설정해야합니다
2

(기본값은 20) 우리 출력 텍스트를 너무 많이 인코딩하지 않도록 ASTText 노드에 byte[]을 캐시하십시오.

+0

+1 Taobao.com 출신입니까? –

+0

당신이 어떻게했는지에 대해 더 자세히 설명해 줄 수 있습니까? –

+0

당신이 어떻게했는지 알았을 것 같아요. 고맙습니다 ~! 하지만 출력 텍스트를 너무 많이 인코딩한다고 말하는 이유는 무엇입니까? 나는 그것을 이해하지 못한다. –

관련 문제