2016-09-26 5 views
1

私はXPagesアプリケーションでApache Poi経由でpowerpointsファイルを作成しています。私は繰り返し制御を有するのXPageに私のXagentをスピードアップするにはどうしたらいいですか?

、繰り返しの各行は、仕事をしていません「xagent」(SSJS)を開始ボタンを表示します。

<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

。合計計算時間の底に到達したい場合は、各操作を見てアイデアを得る必要があります。

は、ユーザーの便宜のため、そこにはかなりのリソースがあります

読書から戻っていますか? JavaへSSJSからあなたの全体のコードを移動することです

最初のピットストップ:ここで私は見て開始するものです。 SSJSでJavaオブジェクトまたはJavaメソッドを呼び出すたびに、ボックス化/ボックス化解除され、時間がかかります。しかし、そのステップだけではあなたに多くの執行猶予が与えられるとは思えません。しかし、それはもっと極端な対策のために必要なステップです。 Javaクラスを作成したら、通常のJavaアプリケーションを使用してコマンドラインからテストし、さらにタイマー文を追加できます。または、Java profilerを使用してみてください。外を見るために

もの:

  • どのくらいの時間がドキュメントに移動するのにかかるん。autoupdate=false付きビューナビゲーターは、あなたがそれはあなたが
  • 読んでドキュメントを開くために取るんあなたは一度だけの文書を読んでくださいどのくらいのビューからデータを読み込むのではなく、文書
  • を開くことができます
  • 最速のほとんどの時間です、あなたはより頻繁に
  • が非効率的なループ
  • ですそれらを必要とする可能性がある場合でも、適切に
  • リサイクルすべてのオブジェクトは、あなたは、長い文字列操作を避けてくださいされています(StringBuilderのはあなたの友達です)
  • 出力を行う場合cumentsは(サックスに似た)ストリーム・アプローチを使用すると、パフォーマンスのグレムリンは、あなたが表示されませんでしたコードであるかもしれない

を必要とするものだけをインポート

  • 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を試すことができます。

    関連する問題