[
https://issues.apache.org/jira/browse/TAP5-2332?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14006236#comment-14006236
]
Thiago H. de Paula Figueiredo commented on TAP5-2332:
-----------------------------------------------------
Jochen, you got it wrong. I and Lance do want to make the code faster. We've
stated this many times already. The difference is that we only want to make
changes (specifically replacing String.format() by InternalUtils.concat()) in
places which will actually make a difference in performance. That's not
abstract software development principles. This is a very concrete,
battle-tested principle, used for *decades* in all kinds of projects, large and
small. It's also about not wasting time changing code that won't make an
improvement in performance.
Michael, it cannot be applied to all places because there are some places
(maybe many) which aren't just simple string concatenation: they actually use
String.format() features string concatenation doesn't have, such as formatting
of numbers and dates, padded strings and non-sequential parameters. The whole
internationalization of messages in Tapestry needs that.
Guys, could you please listen a bit to people who are committers for many years
already? :-)
> Optimize String concatenation performance
> -----------------------------------------
>
> Key: TAP5-2332
> URL: https://issues.apache.org/jira/browse/TAP5-2332
> Project: Tapestry 5
> Issue Type: Improvement
> Reporter: Michael Mikhulya
> Assignee: Jochen Kemnade
> Priority: Minor
> Labels: performance
> Attachments: 0001-TAP5-2332-get-rid-of-String.format-usage.patch,
> profile-patched.png, profile-vanilla.png
>
>
> During profiling I found that String.format provides much load on CPU.
> In many cases in Tapestry String.format can be easily replaced with simple
> String concatenation.
> Simple JMH (http://openjdk.java.net/projects/code-tools/jmh/) test
> {code:java}
> public class FormatVsConcat {
> private static final String format = "This is a test string with %s";
> private static final String concat1 = "This is a test string with ";
> private static final String concat2 = "test word";
> @GenerateMicroBenchmark
> public String format() {
> return String.format(format, concat2);
> }
> @GenerateMicroBenchmark
> public String concat() {
> return concat1 + concat2;
> }
> }
> {code}
> shows, that concatenation is 366(!) times faster.
> I removed only hot places in tapestry and get following results with apache
> benchmark:
> *Not patched* tapestry version:
> Requests per second: *21.38 /sec* (mean)
> Time per request: *46.764 [ms]* (mean)
> *Patched* tapestry version:
> Requests per second: *27.77 /sec* (mean)
> Time per request: *36.013 [ms]* (mean)
> So we gained 10ms per request or 20% of rendering time.
> If you don't mind I would like to get rid of String.format in all places of
> Tapestry and provide patch. I fixed only hot places which appeared during
> ab-profiling of one concrete page. So it is very likely that not all hot
> places were found and fixed.
--
This message was sent by Atlassian JIRA
(v6.2#6252)