我有性能问题与RemoteCommand标号豆方法的时间滞后。
使用PrimeFaces4.0,我们的xhtml页面在运行时将大量div加载到面板中
<p:outputPanel id="runtime_panel" autoUpdate="true" />一些SelectOneRadio控件通过setOnchange()方法拥有侦听器。他们调用RemoteCommand,这是在设计时在xhtml页面中定义的:
<p:remoteCommand name="ourRemoteCommand"
actionListener="#{bean.someMethod}" update="runtime_panel"
/>bean.someMethod的目的是通过ajax在页面中显示或隐藏某些GUI控件。Bean是请求的作用域。
问题是,当从客户端调用bean.someMethod时,存在一定的时间差。在我的测试中,javascript会突然响应,但是当我通过服务器端的断点捕获bean.someMethod时,会有相当长的延迟时间--大约2.5秒。
我还将bean范围更改为会话范围以消除构建阶段的滞后,但是这个缝没有问题--它没有解决时间滞后问题。
如果"runtime_panel“中只有少量元素,我没有注意到任何滞后,断点在"bean.someMethod”中立即停止。控制数量与响应时间之间存在相关关系。
我还创建了另一个测试放置虚拟RemoteCommand在页面的开头,以自己的形式。
<form>
<p:remoteCommand name="rcgg" partialSubmit="true" process="@this" update="@none" actionListener="#{bean.testMethod()}" />
<h:outputText id="msgs" value="Ajax Submit" />
<p:commandButton type="button" onclick="console.log('client start');rcgg('ddd');console.log('client end')" value="Ajax1" icon="ui-icon-refresh" />
</form> 因此,服务器端代码也会立即执行。但是,当"outputPanel“有许多gui元素时,服务器端开始执行时也存在时间延迟,即使与此RemoteCommand "rcgg”没有任何关系。真奇怪。
我还测试了几个RemoteCommand分布(
immediate="false" async="true" partialSubmit="true" ignoreAutoUpdate="true" process="@none" global="false"
update="@none")但也没有成功。
我不知道如何摆脱这种“豆类呼叫滞后”。
我真的需要你的帮助。
发布于 2014-11-19 06:14:35
通常,您必须在process=@this上使用p:remoteCommand,否则它将提交整个h:form及其组件。
因此,最好将p:remoteCommand保存在单独的h:form中。
如果这也不起作用,您可以始终使用RequestContext的update方法在ManagedBean上更新组件。
RequestContext.getCurrentInstance().update("COMPONENT_ID_TO_UPDATE")https://stackoverflow.com/questions/26991168
复制相似问题