createMarkup() is the guts of innerHTML - the way it is implemented now leads to lots of conversion between DeprecatedString and String, and lots of random concatenation. It could be much faster to use a Vector<UChar> and build the whole string in that, and then use String::adopt to do the whole operation without excess conversions.
Created attachment 16498 [details] the speedup described plus a few more micro-optimizations to innerHTML