Little explanation about how the spritefont plugin works:
First when the plugin gets loaded, it creates a list of all the clipping coordinates for all the characters.
Then on the first draw, or each time the text changes or each time the object's width changes, the plugin will calculate the word wrapping (splits the text in lines according to wrapping method, size of the object, etc)
Then it will draw each letter the same way a sprite is drawn (taking care of horizontal and vertical alignement for you):
- in canvas2D mode, using the context.drawImage() function
- in webGL mode by building quads that c2 uses to pass to the default rendering shader along with the texture.
What you have to keep in mind is that each time the text needs to be drawn on the canvas, whether it's webGL or canvas2D, each letter will have to be redrawn.
It means, that will happen each time your text moves, each time the text is modified and, I think, each time any object gets on top or underneath your text.
So if you have a constantly scrolling game (like bit trip runner), your spritefont text will be redrawn each tick.
Drawing a lot of characters one by one can end up being quite expensive in canvas2D. In WebGL you can just think that one character costs 2 triangles (think 3D rendering) so you'll probably have 200 triangles for a 100 character text. Which should be ok in most devices... I think.
Also, any characters not in your character set will be drawn as a nothing, it will just offset the next character's drawing, creating a space.
So basically, i'm saying that spaces should more or less cost nothing (unless you put a space in your character set... which you shouldn't do (: