Updated Branches: refs/heads/master 3d2dfa75d -> 36c90fa61
WICKET-4418 Combine all JavaScript evaluations in one <evaluate> element for better performance at the client side Pass all scripts to XmlAjaxResponse so that it can decide how to render them - one by one or all in one <evaluate>. Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/36c90fa6 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/36c90fa6 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/36c90fa6 Branch: refs/heads/master Commit: 36c90fa61dae547835a8205fba0dd5e1579c49dc Parents: 3d2dfa7 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Tue Feb 21 11:42:28 2012 +0100 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Tue Feb 21 11:42:28 2012 +0100 ---------------------------------------------------------------------- .../apache/wicket/ajax/AbstractAjaxResponse.java | 29 ++++----------- .../org/apache/wicket/ajax/AjaxRequestHandler.java | 11 ++---- .../org/apache/wicket/ajax/XmlAjaxResponse.java | 19 ++++++++-- 3 files changed, 27 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/36c90fa6/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxResponse.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxResponse.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxResponse.java index 4f89b15..8cab7e1 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxResponse.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxResponse.java @@ -16,6 +16,7 @@ */ package org.apache.wicket.ajax; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; @@ -146,28 +147,14 @@ abstract class AbstractAjaxResponse // queue up prepend javascripts. unlike other steps these are executed out of order so that // components can contribute them from inside their onbeforerender methods. - Iterator<CharSequence> it = prependJavaScripts.iterator(); - while (it.hasNext()) - { - CharSequence js = it.next(); - writePriorityEvaluation(response, js); - } + writePriorityEvaluations(response, prependJavaScripts); // execute the dom ready javascripts as first javascripts // after component replacement - it = domReadyJavaScripts.iterator(); - while (it.hasNext()) - { - CharSequence js = it.next(); - writeNormalEvaluation(response, js); - } - - it = appendJavaScripts.iterator(); - while (it.hasNext()) - { - CharSequence js = it.next(); - writeNormalEvaluation(response, js); - } + List<CharSequence> evaluationScripts = new ArrayList<CharSequence>(); + evaluationScripts.addAll(domReadyJavaScripts); + evaluationScripts.addAll(appendJavaScripts); + writeNormalEvaluations(response, evaluationScripts); writeFooter(response, encoding); } @@ -191,7 +178,7 @@ abstract class AbstractAjaxResponse * @param js * the JavaScript to evaluate */ - protected abstract void writePriorityEvaluation(Response response, CharSequence js); + protected abstract void writePriorityEvaluations(Response response, Collection<CharSequence> js); /** * @@ -200,7 +187,7 @@ abstract class AbstractAjaxResponse * @param js * the JavaScript to evaluate */ - protected abstract void writeNormalEvaluation(Response response, CharSequence js); + protected abstract void writeNormalEvaluations(Response response, Collection<CharSequence> js); /** * Processes components added to the target. This involves attaching components, rendering http://git-wip-us.apache.org/repos/asf/wicket/blob/36c90fa6/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java index 7a349ad..b9dffa9 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java @@ -48,8 +48,6 @@ import org.apache.wicket.util.string.AppendingStringBuffer; import org.apache.wicket.util.string.Strings; import org.apache.wicket.util.visit.IVisit; import org.apache.wicket.util.visit.IVisitor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * A request target that produces ajax response envelopes used on the client side to update @@ -81,8 +79,6 @@ import org.slf4j.LoggerFactory; public class AjaxRequestHandler implements AjaxRequestTarget { - private static final Logger LOG = LoggerFactory.getLogger(AjaxRequestHandler.class); - /** * A POJO-like that collects the data for the Ajax response written to the client and serializes * it to specific String-based format (XML, JSON, ...). @@ -108,6 +104,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget * Constructor * * @param page + * the currently active page */ public AjaxRequestHandler(final Page page) { @@ -121,6 +118,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget * events will have been fired by now. * * @param response + * the response to write to */ @Override protected void fireOnAfterRespondListeners(final Response response) @@ -139,7 +137,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget @Override public void addJavaScript(String script) { - writeNormalEvaluation(response, script); + writeNormalEvaluations(response, Collections.<CharSequence>singleton(script)); } }; @@ -414,8 +412,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget } /** - * - * @return + * @return the markup id of the focused element in the browser */ @Override public String getLastFocusedElementId() http://git-wip-us.apache.org/repos/asf/wicket/blob/36c90fa6/wicket-core/src/main/java/org/apache/wicket/ajax/XmlAjaxResponse.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/XmlAjaxResponse.java b/wicket-core/src/main/java/org/apache/wicket/ajax/XmlAjaxResponse.java index f41d0e9..f064007 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/XmlAjaxResponse.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/XmlAjaxResponse.java @@ -16,6 +16,8 @@ */ package org.apache.wicket.ajax; +import java.util.Collection; + import org.apache.wicket.Component; import org.apache.wicket.Page; import org.apache.wicket.request.Response; @@ -176,15 +178,24 @@ abstract class XmlAjaxResponse extends AbstractAjaxResponse } @Override - protected void writeNormalEvaluation(final Response response, final CharSequence js) + protected void writeNormalEvaluations(final Response response, final Collection<CharSequence> scripts) { - writeEvaluation("evaluate", response, js); + writeEvaluations(response, "evaluate", scripts); + } @Override - protected void writePriorityEvaluation(Response response, CharSequence js) + protected void writePriorityEvaluations(Response response, Collection<CharSequence> scripts) { - writeEvaluation("priority-evaluate", response, js); + writeEvaluations(response, "priority-evaluate", scripts); + } + + private void writeEvaluations(final Response response, String elementName, Collection<CharSequence> scripts) + { + for (CharSequence script : scripts) + { + writeEvaluation(elementName, response, script); + } } /**
