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);
+               }
        }
 
        /**

Reply via email to