Tuesday, May 5, 2015

Re: GWT vs js performance: Collections and Strings

GWT already optimizes a HashMap<String, ...> similar to what you have implemented. You can see this in [1] and the specialized methods if the key type is String.class. Also ArrayList is backed by a native JS array. Of course GWT carries some overhead because it emulates the full Java API but because it's already quite optimized you don't see a huge improvement when switching from Java to JavaJsCollection. The largest improvement is on IE but IMHO thats not a surprise.

StringBuilder in GWT is just appending strings and does not use any buffer array like in real Java. It is basically s += toAppend which is pretty fast in browsers.

The biggest difference I see is that the Java / JavaJsCollection version use String.toCharArray() which actually creates a new array, walks the string and fills the array. It is probably faster to do

for (int i = 0; i < string.length(); i++) { 
  char c = string.charAt(i); 
  ....
}

because Java's String.charAt(i) is directly mapped to JavaScript's String.charCodeAt(i) (see [2]) and you avoid the char array creation.


[1] https://gwt.googlesource.com/gwt/+/master/user/super/com/google/gwt/emul/java/util/AbstractHashMap.java
[2] https://gwt.googlesource.com/gwt/+/master/user/super/com/google/gwt/emul/java/lang/String.java#609


--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment