Xpages 如何加快我的Xagent?

Xpages 如何加快我的Xagent?,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我正在XPages应用程序中通过ApachePOI创建powerpoints文件 在xpage上,我有一个repeat控件,repeat中的每一行都显示一个按钮,该按钮启动一个执行作业的“xagent”(SSJS) 我怎样才能加快这个过程 我的xagent代码如下所示: importPackage(java.lang); importPackage(org.apache.poi.xslf.usermodel); //getting sessionvariables var sessSlide

我正在XPages应用程序中通过ApachePOI创建powerpoints文件

在xpage上,我有一个repeat控件,repeat中的每一行都显示一个按钮,该按钮启动一个执行作业的“xagent”(SSJS)

我怎样才能加快这个过程

我的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();

决定应用程序整体速度的因素有很多。如果您想了解总计算时间的最底层,您需要查看每个操作以获得一个想法

为了您的方便,这里有很多资源

从阅读中回来?以下是我将开始关注的内容:

第一步是将整个代码从SSJS移动到Java。每次在SSJS中调用Java对象或Java方法时,它都会被装箱/取消装箱,这需要一些时间。然而,我怀疑仅仅这一步并不能给你带来多少喘息的机会。但这是采取更极端措施的必要步骤。 一旦您有了一个Java类来完成您的工作,您就可以使用常规Java应用程序从命令行测试它,并添加更多的计时器语句。或者试着用一种新的方法

注意事项:

  • 导航到文档需要多长时间。大多数情况下,带有
    autoupdate=false
    的视图导航器是最快的
  • 您是否可以从视图加载数据,而不是打开文档
  • 打开您阅读的文档需要多长时间
  • 您是否只阅读一次文档,即使您可能更经常地需要它们
  • 是否存在低效循环
  • 是否所有物品都被正确回收
  • 您是否避免冗长的字符串操作(StringBuilder是您的朋友)
  • 如果输出文档很大,流方法(类似于Sax)可能比dom方法快
  • 只导入您需要的内容

性能小精灵可能在您没有显示的代码中。

我觉得有点困惑:您的重复包含按钮。所以用户需要点击它来启动xagent。所以这些时间(16:57:05,16:57:38,16:57:58)就是有人点击按钮的时间。从代码的角度看,我看不出有什么慢

除非用户连续单击所有这些按钮,并且您观察到xagent延迟启动。那么问题就在这里


您可以尝试前面提到的
xsp.session.transient
属性,或者提前准备演示文稿。

更具体的是,是否有数字显示触发xagent需要多长时间?在我的例子中,我有一个输入和一个输出流。上面所有的因素都会影响它。取决于服务器的繁忙程度。如果不依赖于会话变量,您可以使用Ajax并行启动它们
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
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();