我正在将一个项目从(JSF1.2,Richfaces 3.3.4运行在JBoss 4.2.3上)迁移到(JSF2.2,Richfaces 4.5运行在Wildfly 8.1.0上)。在部分迁移了一些视图后,我发现使用JSF2的应用程序性能非常差。
当发送Ajax请求时,我注意到这个问题,JSF2会渲染整个视图,尽管render属性指向一个outputText。
例如(可以从HERE下载)
在我的示例中,我将为JSF1.2和2.2使用相同的代码示例。然后,我将多次单击ajax按钮,并使用Chrome检查工具测量每个请求的响应时间。
给定以下index1.XHTML,使用JSF1.2和Richfaces 3.3.4。
点击“TestBtn”多次,平均时间为15毫秒:
点击“TestBtn”多次,平均时间为18毫秒:
我在 index1.xhtml 和 index2.xhtml 中各添加了这些元素 300 次,并重复了相同的测试。
使用 index1.xhtml (JSF 1.2) 的结果,我得到了平均时间为 19ms。
更新:在Tomcat服务器上测试JSF 2示例,平均需要20毫秒。我猜问题是由Wildfly引起的。不幸的是,我无法更改服务器。我应该找到一个JSF 2可以在Wildfly上工作的解决方案。我尝试升级到Wildfly 8.2.0——仍然存在性能问题。在谷歌上搜索后,最接近的问题是POST。所以我升级了我的JDK到jdk1.7.0_71——仍然存在性能问题。
更新2:这里是发送给Wildfly服务器的ajax请求(点击一次)的日志(LOG)。
为什么在我只重新渲染特定ID时,JSF会构建整个视图?
** 注意:我不知道JSF是否应该这样工作,或者我是否在误用它。**
提前感谢, Tefa
当发送Ajax请求时,我注意到这个问题,JSF2会渲染整个视图,尽管render属性指向一个outputText。
例如(可以从HERE下载)
在我的示例中,我将为JSF1.2和2.2使用相同的代码示例。然后,我将多次单击ajax按钮,并使用Chrome检查工具测量每个请求的响应时间。
给定以下index1.XHTML,使用JSF1.2和Richfaces 3.3.4。
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a="http://richfaces.org/a4j">
<head>
</head>
<body id="body">
<!-- Later the outputText elements below will be included here-->
<h:form>
<a:commandButton value="TestBtn" reRender="output"/>
</h:form>
<h:outputText value="test" id="output"/>
</body>
</html>
点击“TestBtn”多次,平均时间为15毫秒:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a="http://richfaces.org/a4j">
<h:head>
</h:head>
<h:body id="body">
<!-- Later the outputText elements below will be included here-->
<h:form>
<a:commandButton value="TestBtn" render="output"/>
</h:form>
<h:outputText value="test" id="output"/>
</h:body>
</html>
点击“TestBtn”多次,平均时间为18毫秒:
<h:outputText value="testingElement"/>
<h:outputText value="testingElement"/>
<h:outputText value="testingElement"/>
<h:outputText value="testingElement"/>
<h:outputText value="testingElement"/>
<h:outputText value="testingElement"/>
<h:outputText value="testingElement"/>
<h:outputText value="testingElement"/>
<h:outputText value="testingElement"/>
<h:outputText value="testingElement"/>
............. (300 times, of course this is just for testing purposes)
我在 index1.xhtml 和 index2.xhtml 中各添加了这些元素 300 次,并重复了相同的测试。
使用 index1.xhtml (JSF 1.2) 的结果,我得到了平均时间为 19ms。
更新:在Tomcat服务器上测试JSF 2示例,平均需要20毫秒。我猜问题是由Wildfly引起的。不幸的是,我无法更改服务器。我应该找到一个JSF 2可以在Wildfly上工作的解决方案。我尝试升级到Wildfly 8.2.0——仍然存在性能问题。在谷歌上搜索后,最接近的问题是POST。所以我升级了我的JDK到jdk1.7.0_71——仍然存在性能问题。
更新2:这里是发送给Wildfly服务器的ajax请求(点击一次)的日志(LOG)。
为什么在我只重新渲染特定ID时,JSF会构建整个视图?
** 注意:我不知道JSF是否应该这样工作,或者我是否在误用它。**
提前感谢, Tefa