2016-09-26 2 views
1

XPages 앱의 Apache Poi를 통해 파워 포인트 파일을 만들고 있습니다.내 Xagent의 속도를 높이려면 어떻게해야합니까?

xpage에 반복 컨트롤이 있습니다. 반복의 각 행에는 작업 (SSJS)을 수행하는 "xagent"를 시작하는 버튼이 표시됩니다.

<xp:button id="button7" value="Download"> 
    <xp:eventHandler event="onclick" submit="true" 
     refreshMode="norefresh"> 
      <xp:this.action><![CDATA[#{javascript:sessionScope.docId = obj.unid; 
sessionScope.slideType = "TITLE_AND_CONTENT"; 
sessionScope.fieldList = ["refName","refSub","refStrength","refWeakness"]; 
context.redirectToPage("StreamPresentation.xsp");}]]></xp:this.action> 
    </xp:eventHandler></xp:button> 

각 행에 대해 내보내기를 실행하는 데 약간의 시간이 걸립니다. 다음은 로그의 "시간보고"입니다.

2016-09-26 16:57:05 HTTP JVM: time:2016-09-26 16:57 
2016-09-26 16:57:05 HTTP JVM: docId:6AD84C823BD8A52FC125803A0051BE49 
2016-09-26 16:57:38 HTTP JVM: time:2016-09-26 16:57 
2016-09-26 16:57:38 HTTP JVM: docId:660E0CC12C3E1046C1258039006AA394 
2016-09-26 16:57:58 HTTP JVM: time:2016-09-26 16:57 
2016-09-26 16:57:58 HTTP JVM: docId:C8DD8933E26057C3C1258039006A3ED0 

어떻게 처리 속도를 높일 수 있습니까?

내 xagent 코드는 다음과 같이 약간 보이는 : 응용 프로그램의 모든 것을 속도를 결정하는 많은 많은 요인이있다

importPackage(java.lang); 
importPackage(org.apache.poi.xslf.usermodel); 

//getting sessionvariables 
var sessSlide = sessionScope.slideType; 
var docId = sessionScope.docId; 
print("time:" + @Now()); 
print("docId:" + docId); 
var sessFields = sessionScope.fieldList; 

var doc:NotesDocument; 
doc = database.getDocumentByUNID(docId); 

var ppt: XMLSlideShow = new XMLSlideShow(); 

/* 
* creating slides here... 
/* 

//The Faces Context global object provides access to the servlet environment via the external content 
var extCont = facesContext.getExternalContext(); 
//The servlet's response object provides control to the response object 
var pageResponse = extCont.getResponse(); 
//Get the output stream to stream binary data 
var pageOutput = pageResponse.getOutputStream(); 

//Set the content type and headers 
pageResponse.setContentType("application/vnd.openxmlformats-officedocument.presentationml.presentation"); 
pageResponse.setHeader("Cache-Control", "no-cache"); 
pageResponse.setHeader("Content-Disposition", "inline; filename=" + fileName); 

ppt.write(pageOutput); 
pageOutput.flush(); 
pageOutput.close(); 

facesContext.responseComplete(); 

답변

2

. 총 계산 시간의 맨 아래로 가려면 각 작업을보고 아이디어를 얻어야합니다.

은 사용자의 편의를 위해, 거기에 꽤 많은 자원이있다

독서에서 돌아 왔습니까? 다음과 같이 살펴 보겠습니다.

첫 번째 중단 점은 전체 코드를 SSJS에서 Java로 옮기는 것입니다. SSJS에서 Java 객체 또는 Java 메소드를 호출 할 때마다 시간이 오래 걸리는 boxed/unboxed가됩니다. 그러나 나는 그 단계만으로는 당신에게 많은 집행 유예를주지 않을 것이라고 생각합니다. 그러나 더 극단적 인 조치를 취하는 데 필요한 조치입니다. 작업을 수행하는 Java 클래스가 있으면 일반 Java 응용 프로그램을 사용하여 명령 줄에서 테스트하고 타이머 문을 더 추가 할 수 있습니다. 또는 Java profiler을 사용해보십시오. 피려

것들 :

  • 이 얼마나이 문서를 탐색하기 위해 수행 않습니다.autoupdate=false있는보기 Navigator는 대부분의 시간 빠른
  • 당신이 아니라 문서를 열기보다보기에서 데이터를로드 할 수 있습니다
  • 당신이
  • 는 한 번만 문서를 읽을 수 있습니까 읽을 문서를 여는 데 얼마나 걸립니까 , 당신이 그들을해야 할 경우에도 더 자주
  • 이 비효율적 루프는
  • 출력 할 경우 (친구의 StringBuilder입니다)
  • 가 제대로
  • 당신이 긴 문자열 작업을 피하기 마십시오 재활용 모든 객체인가 cuments은 (SAX와 유사) 스트림 방식은 DOM 방식보다 빠른 수 있습니다 큰

성능 놈아 당신이 보이지 않았다 코드에있을 수 있습니다 필요한 것만 가져 오기.

+0

더 구체적으로는 xagent를 트리거하는 데 얼마나 오래 걸리는지? 제 경우에는 입력과 출력 스트림이 있습니다. –

+0

위의 모든 요인이 영향을줍니다. 서버가 얼마나 바쁜지에 달려 있습니다. 세션 변수에 의존하지 않으면 Ajax를 병렬로 실행할 수 있습니다. – stwissel

1

조금 혼란 스럽습니다. 반복에는 버튼이 포함되어 있습니다. 따라서 xagent를 시작하려면 사용자가 그것을 클릭해야합니다. 그래서 그 시간 (16:57:05, 16:57:38, 16:57:58)은 누군가 해당 버튼을 클릭했을 때의 것입니다. 나는 코드 관점에서 느린 것을 본다.

사용자가 연속적으로 모든 것을 클릭하지 않으면 xagent 지연 시작을 관찰합니다. 그런 다음 문제는 synchronization in XPages입니다.

사전에 프레젠테이션을 준비하려면 xsp.session.transient 속성 또는 multiple threads을 사용해 볼 수 있습니다.

관련 문제