This is an automated email from the ASF dual-hosted git repository. mgrigorov pushed a commit to branch wicket-8.x in repository https://gitbox.apache.org/repos/asf/wicket.git
commit 7cd6e183f10de9b2ef8959095d63065b797c29c5 Author: Thomas Heigl <[email protected]> AuthorDate: Sun Aug 30 20:42:46 2020 +0200 WICKET-6824 Replace slow `String.format` with concatenation This closes #449 (cherry picked from commit ad5e81b83b49ba1b58945cb14df1a63fa508f44a) --- .../src/main/java/org/apache/wicket/Component.java | 16 +++---- .../wicket/ajax/AbstractDefaultAjaxBehavior.java | 52 +++++++++++----------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/wicket-core/src/main/java/org/apache/wicket/Component.java b/wicket-core/src/main/java/org/apache/wicket/Component.java index 2a1d639..a3bf34f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Component.java +++ b/wicket-core/src/main/java/org/apache/wicket/Component.java @@ -2357,15 +2357,13 @@ public abstract class Component */ protected void renderPlaceholderTag(final ComponentTag tag, final Response response) { - String name = Strings.isEmpty(tag.getNamespace()) ? tag.getName() : tag.getNamespace() + ':' + tag.getName(); - - response.write("<"); - response.write(name); - response.write(" id=\""); - response.write(getAjaxRegionMarkupId()); - response.write("\" style=\"display:none\" data-wicket-placeholder=\"\"></"); - response.write(name); - response.write(">"); + String name = Strings.isEmpty(tag.getNamespace()) ? tag.getName() + : tag.getNamespace() + ':' + tag.getName(); + + // prefer concatenation over String#format() for performance + response.write( + "<" + name + " id=\"" + getAjaxRegionMarkupId() + + "\" style=\"display:none\" data-wicket-placeholder=\"\"></" + name + ">"); } diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java index ae0857f3..1a4fd74 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java @@ -62,16 +62,16 @@ public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior public static final ResourceReference INDICATOR = new PackageResourceReference( AbstractDefaultAjaxBehavior.class, "indicator.gif"); - private static final String DYNAMIC_PARAMETER_FUNCTION_TEMPLATE = "function(attrs){%s}"; - private static final String PRECONDITION_FUNCTION_TEMPLATE = "function(attrs){%s}"; - private static final String COMPLETE_HANDLER_FUNCTION_TEMPLATE = "function(attrs, jqXHR, textStatus){%s}"; - private static final String FAILURE_HANDLER_FUNCTION_TEMPLATE = "function(attrs, jqXHR, errorMessage, textStatus){%s}"; - private static final String SUCCESS_HANDLER_FUNCTION_TEMPLATE = "function(attrs, jqXHR, data, textStatus){%s}"; - private static final String AFTER_HANDLER_FUNCTION_TEMPLATE = "function(attrs){%s}"; - private static final String BEFORE_SEND_HANDLER_FUNCTION_TEMPLATE = "function(attrs, jqXHR, settings){%s}"; - private static final String BEFORE_HANDLER_FUNCTION_TEMPLATE = "function(attrs){%s}"; - private static final String INIT_HANDLER_FUNCTION_TEMPLATE = "function(attrs){%s}"; - private static final String DONE_HANDLER_FUNCTION_TEMPLATE = "function(attrs){%s}"; + private static final String DYNAMIC_PARAMETER_FUNCTION_SIGNATURE = "function(attrs)"; + private static final String PRECONDITION_FUNCTION_SIGNATURE = "function(attrs)"; + private static final String COMPLETE_HANDLER_FUNCTION_SIGNATURE = "function(attrs, jqXHR, textStatus)"; + private static final String FAILURE_HANDLER_FUNCTION_SIGNATURE = "function(attrs, jqXHR, errorMessage, textStatus)"; + private static final String SUCCESS_HANDLER_FUNCTION_SIGNATURE = "function(attrs, jqXHR, data, textStatus)"; + private static final String AFTER_HANDLER_FUNCTION_SIGNATURE = "function(attrs)"; + private static final String BEFORE_SEND_HANDLER_FUNCTION_SIGNATURE = "function(attrs, jqXHR, settings)"; + private static final String BEFORE_HANDLER_FUNCTION_SIGNATURE = "function(attrs)"; + private static final String INIT_HANDLER_FUNCTION_SIGNATURE = "function(attrs)"; + private static final String DONE_HANDLER_FUNCTION_SIGNATURE = "function(attrs)"; /** * Subclasses should call super.onBind() @@ -262,46 +262,46 @@ public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior CharSequence initHandler = ajaxCallListener.getInitHandler(component); appendListenerHandler(initHandler, attributesJson, AjaxAttributeName.INIT_HANDLER.jsonName(), - INIT_HANDLER_FUNCTION_TEMPLATE); + INIT_HANDLER_FUNCTION_SIGNATURE); CharSequence beforeHandler = ajaxCallListener.getBeforeHandler(component); appendListenerHandler(beforeHandler, attributesJson, AjaxAttributeName.BEFORE_HANDLER.jsonName(), - BEFORE_HANDLER_FUNCTION_TEMPLATE); + BEFORE_HANDLER_FUNCTION_SIGNATURE); CharSequence beforeSendHandler = ajaxCallListener .getBeforeSendHandler(component); appendListenerHandler(beforeSendHandler, attributesJson, AjaxAttributeName.BEFORE_SEND_HANDLER.jsonName(), - BEFORE_SEND_HANDLER_FUNCTION_TEMPLATE); + BEFORE_SEND_HANDLER_FUNCTION_SIGNATURE); CharSequence afterHandler = ajaxCallListener.getAfterHandler(component); appendListenerHandler(afterHandler, attributesJson, - AjaxAttributeName.AFTER_HANDLER.jsonName(), AFTER_HANDLER_FUNCTION_TEMPLATE); + AjaxAttributeName.AFTER_HANDLER.jsonName(), AFTER_HANDLER_FUNCTION_SIGNATURE); CharSequence successHandler = ajaxCallListener.getSuccessHandler(component); appendListenerHandler(successHandler, attributesJson, AjaxAttributeName.SUCCESS_HANDLER.jsonName(), - SUCCESS_HANDLER_FUNCTION_TEMPLATE); + SUCCESS_HANDLER_FUNCTION_SIGNATURE); CharSequence failureHandler = ajaxCallListener.getFailureHandler(component); appendListenerHandler(failureHandler, attributesJson, AjaxAttributeName.FAILURE_HANDLER.jsonName(), - FAILURE_HANDLER_FUNCTION_TEMPLATE); + FAILURE_HANDLER_FUNCTION_SIGNATURE); CharSequence completeHandler = ajaxCallListener.getCompleteHandler(component); appendListenerHandler(completeHandler, attributesJson, AjaxAttributeName.COMPLETE_HANDLER.jsonName(), - COMPLETE_HANDLER_FUNCTION_TEMPLATE); + COMPLETE_HANDLER_FUNCTION_SIGNATURE); CharSequence precondition = ajaxCallListener.getPrecondition(component); appendListenerHandler(precondition, attributesJson, - AjaxAttributeName.PRECONDITION.jsonName(), PRECONDITION_FUNCTION_TEMPLATE); + AjaxAttributeName.PRECONDITION.jsonName(), PRECONDITION_FUNCTION_SIGNATURE); CharSequence doneHandler = ajaxCallListener.getDoneHandler(component); appendListenerHandler(doneHandler, attributesJson, AjaxAttributeName.DONE_HANDLER.jsonName(), - DONE_HANDLER_FUNCTION_TEMPLATE); + DONE_HANDLER_FUNCTION_SIGNATURE); } } @@ -318,9 +318,7 @@ public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior { for (CharSequence dynamicExtraParameter : dynamicExtraParameters) { - String func = String.format(DYNAMIC_PARAMETER_FUNCTION_TEMPLATE, - dynamicExtraParameter); - JSONFunction function = new JSONFunction(func); + JSONFunction function = getJsonFunction(DYNAMIC_PARAMETER_FUNCTION_SIGNATURE, dynamicExtraParameter); attributesJson.append(AjaxAttributeName.DYNAMIC_PARAMETER_FUNCTION.jsonName(), function); } @@ -418,7 +416,7 @@ public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior } private void appendListenerHandler(final CharSequence handler, final JSONObject attributesJson, - final String propertyName, final String functionTemplate) throws JSONException + final String propertyName, final String signature) throws JSONException { if (Strings.isEmpty(handler) == false) { @@ -429,13 +427,17 @@ public abstract class AbstractDefaultAjaxBehavior extends AbstractAjaxBehavior } else { - String func = String.format(functionTemplate, handler); - function = new JSONFunction(func); + function = getJsonFunction(signature, handler); } attributesJson.append(propertyName, function); } } + private JSONFunction getJsonFunction(String signature, CharSequence body) { + String func = signature + "{" + body + "}"; + return new JSONFunction(func); + } + /** * Gives a chance to modify the JSON attributesJson that is going to be used as attributes for * the Ajax call.
