GWT falls under your 2nd option, but avoids some of those CONS. It sends a small amount of javascript to bootstrap the process and determine what browser you are using. It then makes a round trip to obtain the rest of your code specific to the clients browser. This avoids sending unnecessary code for other browsers and cuts down on the need to preload a lot of javascript.