3

几天前我下载了 Calabash XML,并在命令提示符下轻松地运行它。然后我尝试从 Java 代码运行它,我注意到没有 API(例如 Calabash 主方法非常庞大,到处都有代码调用)。为了让它工作非常混乱,因为我必须将大块从 main 方法复制到包装类,并从 System.out 转移到字节数组输出流(并最终进入字符串),即

...

ByteArrayOutputStream baos = new ByteArrayOutputStream ();  // declare at top

...

WritableDocument wd = null;
if (uri != null) {
    URI furi = new URI(uri);
    String filename = furi.getPath();
    FileOutputStream outfile = new FileOutputStream(filename);
    wd = new WritableDocument(runtime,filename,serial,outfile);
} else {
    wd = new WritableDocument(runtime,uri,serial, baos);    // new "baos" parameter
}

性能似乎非常非常慢,例如我运行了一个简单的过滤器 1000 次......

<p:filter>
    <p:with-option name="select" select="'/result/meta-data/neighbors/document/title'"  />
</p:filter>

平均每次花费 17 毫秒,这看起来并不多,但我的 Spring REST 控制器调用 Mongo DB 和加密调用等平均需要 3/4 毫秒。

从代码运行 Calabash 时有人遇到过这种情况吗?我可以做些什么来加快速度吗?

例如,我每次都会调用它 -

XProcRuntime runtime = new XProcRuntime(config);

这可以创建一次并重复使用吗?感谢任何帮助,因为我不想花钱来使用 Calamet,但真的想让 Xproc 从代码工作到可接受的性能。

4

1 回答 1

0

有关如何将 XMLCalabash 集成到框架中的示例,我可以提到 Florent Georges 的 Servlex。您必须浏览代码才能找到相关位,但上次我查看它应该不难找到:

http://servlex.net/

不幸的是,XMLCalabash 并不是为了速度而构建的。我敢肯定,如果您运行配置文件,并且可以找到一些热点,Norm Walsh 将会有兴趣了解它。

另一种方法是查看从 XMLCalabash 派生的 Quixprox:

https://code.google.com/p/quixproc/

我也很确定,如果您可以向 Norm 发送一个补丁来改进主类以更好地集成,他会很感兴趣。事实上,代码应该在 github 上,只需 fork ,修复它,然后做一个 pull request..

于 2013-08-14T15:02:13.903 回答