在编译器和拦截器之间进行选择
您可以将编译器或拦截器用于准备和执行 XQuery 表达式、XPath 表达式或 XSLT 样式表。选择使用编译器还是拦截器在很大程度上特定于应用程序,且取决于多个因素。
关于此任务
此文章描述了应用程序运行时期间,准备表达式、查询或样式表时,在编译器和拦截器之间进行选择的相关信息。
还可以提前对表达式、查询和样式表进行准备(预编译)。由于预先准备是提前执行的,不是在应用程序运行时期间执行的,而预编译可能不适用于所有应用程序,因此这是最有效的选择。请查看与预编译相关的文章,以获取更多详细信息。
过程
在 XStaticContext 上使用 setUseCompiler(true) 方法以使用编译器,使用 setUseCompiler(false) 方法以使用拦截器。
缺省选项是将拦截器用于准备 XQuery 表达式、XPath 表达式或 XSLT 样式表。
准备已编译的可执行文件所花时间比准备已解释的可执行文件时间长,但通常已编译的可执行文件运行较快;因此,需要在准备已编译可执行文件的开销和改善执行时间效率之间进行衡量。
因素 | 描述 |
---|---|
将使用可执行文件进行处理的输入文档的数量 | 如果可执行文件将仅用于处理一些输入文档,那么可能不值得需要花费额外的时间来创建已编译的可执行文件,这是因为即使改善了可执行文件的效率,也可能无法弥补额外的准备时间。如果可执行文件将用于处理很多输入文档,那么可能值得花费额外的准备时间。 |
输入文档的大小 | 处理较大型的输入文档花费时间较长;因此,可能值得花费额外的准备时间来创建已编译可执行文件,从而获得更为有效的可执行文件对象来处理更大型的文档。 |
表达式、查询或样式表的大小 | 准备较大型表达式、查询或样式表的花费时间较长;因此,这影响准备时间和执行时间之间的权衡。 |
示例
// Create a new XFactory
XFactory factory = XFactory.newInstance();
// Create a new XStaticContext
XStaticContext staticContext = factory.newStaticContext();
//Use the compiler
sc.setUseCompiler(true);
//Use the interpreter
sc.setUseCompiler(false);