0

在 OGNL 中,建议解析重复使用的表达式以提高性能。

在查阅 API 时,我还注意到有一个compileExpression方法:

在彻底搜索了有关编译与解析的信息之后,我能找到的唯一一篇文章是 Struts 文档的一部分,并提到了如何做到这一点,但没有提到它与解析相比的作用。

在什么情况下应该使用编译而不是单独解析,与简单地解析相同的表达式相比,编译表达式是否可以获得显着的性能优势?

从方法签名来看,似乎 Ognl.parseExpression() 产生了一个独立于输入的对象,但 Ognl.compileExpression() 产生了一个依赖于给定输入(根和上下文)的对象。它是否正确?

4

1 回答 1

2

http://struts.apache.org/release/2.3.x/docs/ognl-expression-compilation.html链接已经很老了,我不确定它是否过时,但它是我写过的唯一真正的文档关于如何使用基于 javassist 的表达式 JIT 代码。

如果您自己使用 ognl 直接或间接使用某些东西显示该区域的性能受到影响,那么这只是一个相关的问题。正常的表达式评估机制可能足以满足大多数需求,但是这个额外的步骤将基本上是调用调用的 java 反射链转换为纯 java 等价物,因此它几乎完全消除了由于反射而使用 OGNL 可能产生的任何影响。

真的,如果您不确定是否需要它,您可能不需要它。抱歉,如果没有这么多看起来很吓人的额外工作,我从来没有把这个概念彻底整合到 OGNL 中。可能最好作为 OGNL 中关闭或打开的可选配置设置,但是.. 如果您愿意,请随意在 github 上分叉。=)

于 2013-06-28T14:29:56.717 回答