You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2008/12/18 20:42:40 UTC
svn commit: r727801 - in
/tapestry/tapestry5/branches/hlship-5.0-perf/tapestry-core/src/main/java/org/apache/tapestry5/dom:
AbstractMarkupModel.java Element.java
Author: hlship
Date: Thu Dec 18 11:42:40 2008
New Revision: 727801
URL: http://svn.apache.org/viewvc?rev=727801&view=rev
Log:
TAP5-417: Tapestry 5.0 Performance Improvements
- Optimize the filtering of text inside MarkupModel.encode()
Modified:
tapestry/tapestry5/branches/hlship-5.0-perf/tapestry-core/src/main/java/org/apache/tapestry5/dom/AbstractMarkupModel.java
tapestry/tapestry5/branches/hlship-5.0-perf/tapestry-core/src/main/java/org/apache/tapestry5/dom/Element.java
Modified: tapestry/tapestry5/branches/hlship-5.0-perf/tapestry-core/src/main/java/org/apache/tapestry5/dom/AbstractMarkupModel.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/hlship-5.0-perf/tapestry-core/src/main/java/org/apache/tapestry5/dom/AbstractMarkupModel.java?rev=727801&r1=727800&r2=727801&view=diff
==============================================================================
--- tapestry/tapestry5/branches/hlship-5.0-perf/tapestry-core/src/main/java/org/apache/tapestry5/dom/AbstractMarkupModel.java (original)
+++ tapestry/tapestry5/branches/hlship-5.0-perf/tapestry-core/src/main/java/org/apache/tapestry5/dom/AbstractMarkupModel.java Thu Dec 18 11:42:40 2008
@@ -19,54 +19,97 @@
/**
* Passes all characters but '<', '>' and '&' through unchanged.
*/
- public void encode(String content, StringBuilder buffer)
- {
- encode(content, false, buffer);
- }
-
public String encode(String content)
{
- StringBuilder buffer = new StringBuilder(content.length() * 2);
+ int length = content.length();
- encode(content, false, buffer);
+ StringBuilder builder = null;
- return buffer.toString();
- }
+ for (int i = 0; i < length; i++)
+ {
+ char ch = content.charAt(i);
- public void encodeQuoted(String content, StringBuilder buffer)
- {
- encode(content, true, buffer);
+ switch (ch)
+ {
+ case '<':
+
+ if (builder == null)
+ {
+ builder = new StringBuilder(2 * length);
+
+ builder.append(content.substring(0, i));
+ }
+
+ builder.append("<");
+ continue;
+
+ case '>':
+
+ if (builder == null)
+ {
+ builder = new StringBuilder(2 * length);
+
+ builder.append(content.substring(0, i));
+ }
+
+ builder.append(">");
+ continue;
+
+ case '&':
+
+ if (builder == null)
+ {
+ builder = new StringBuilder(2 * length);
+
+ builder.append(content.substring(0, i));
+ }
+
+ builder.append("&");
+ continue;
+
+ default:
+
+ if (builder != null)
+ builder.append(ch);
+ }
+ }
+
+ return builder == null ? content : builder.toString();
}
- private void encode(String content, boolean encodeQuotes, StringBuilder buffer)
+ public void encodeQuoted(String content, StringBuilder builder)
{
- char[] array = content.toCharArray();
+ int length = content.length();
- for (char ch : array)
+ for (int i = 0; i < length; i++)
{
+ char ch = content.charAt(i);
+
switch (ch)
{
case '<':
- buffer.append("<");
+
+ builder.append("<");
continue;
case '>':
- buffer.append(">");
+
+ builder.append(">");
continue;
case '&':
- buffer.append("&");
+
+ builder.append("&");
continue;
case '"':
- if (encodeQuotes)
- {
- buffer.append(""");
- continue;
- }
+
+ builder.append(""");
+ continue;
default:
- buffer.append(ch);
+
+ builder.append(ch);
}
}
}
Modified: tapestry/tapestry5/branches/hlship-5.0-perf/tapestry-core/src/main/java/org/apache/tapestry5/dom/Element.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/hlship-5.0-perf/tapestry-core/src/main/java/org/apache/tapestry5/dom/Element.java?rev=727801&r1=727800&r2=727801&view=diff
==============================================================================
--- tapestry/tapestry5/branches/hlship-5.0-perf/tapestry-core/src/main/java/org/apache/tapestry5/dom/Element.java (original)
+++ tapestry/tapestry5/branches/hlship-5.0-perf/tapestry-core/src/main/java/org/apache/tapestry5/dom/Element.java Thu Dec 18 11:42:40 2008
@@ -347,7 +347,13 @@
if (style == EndTagStyle.OMIT) return;
- if (hasChildren || style == EndTagStyle.REQUIRE) writer.printf("</%s>", prefixedElementName);
+ if (hasChildren || style == EndTagStyle.REQUIRE)
+ {
+ // TAP5-471: Avoid use of printf().
+ writer.print("</");
+ writer.print(prefixedElementName);
+ writer.print(">");
+ }
}
private String toPrefixedName(Map<String, String> namespaceURIToPrefix, String namespace, String name)