Hi,
I've been investigating Open Match 3 with an eye towards basing a game on it.
First up I came across some performance issues on Chrome running on my Android Nexus 4. Firefox seemed to deal with everything quite well.
After some digging this turned out to be caused by compositing happening on the CPU due to the browser/phone combo not supporting a hardware accelerated canvas and the "front" layer not being webgl due to the need for gradient and solid fills. However, these two effects aren't worth the jagged framerate they come with on my phone, enabling webgl for the front layer gave me a much better overall experience.
Digging a little deeper I noticed that entire front layer was being painted in these software paints, and that it was the same size as all of the layers (seems to be a wade requirement?). This appears to be due to the following lines in layer.js:147
if ((this._isAndroidStockBrowser && this._clearCanvas) || !(this._useOffScreenTarget && this._renderMode == 'webgl')) { this._needsFullRedraw = true; }
TextSprite.prototype._getHeightElements = function(){ // calculate height by adding the text to a div (because whoever designed the measureText function forgot about the height) if(!TextSprite._heightElements){ var text = $('<span style="white-space:nowrap"></span>'); var block = $('<div style="display: inline-block; width: 1px; height: 0px;"></div>'); var div = $('<div style="white-space:nowrap; overflow:hidden; height:0px; width:0px;" ></div>'); div.append(text, block); var body = $('body'); body.append(div); TextSprite._heightElements = { text: text, block: block, div: div }; } TextSprite._heightElements.text.innerHtml = this._text.replace('<', '< '); TextSprite._heightElements.text.css({ font: this._font }); return TextSprite._heightElements;}; TextSprite.prototype._updateSize = function(){ var context = wade.getInternalContext(); this._lines.length = 0; // calculate height by adding the text to a div (because whoever designed the measureText function forgot about the height) var heightElements = this._getHeightElements(); var block = heightElements.block; var text = heightElements.text; var div = heightElements.div; block.css({ verticalAlign: 'bottom' }); // continues as before