1/31

2/31

The History and Future of

Google Web Toolkit

Ray Cromwell

Tech Lead

3/31

History

4/31

2005 Google Maps

5/31

Timeline

  • GWT 1.0 (2006)
  • GWT 1.3 (2007) First Open Source Release, OSX support
  • GWT 1.4 (2007) JUnit and ImageBundle
  • GWT 1.5 (2008) Java 1.5 support, Overlay Types, DOM API, CSS Themes, Linkers
  • GWT 1.6 (2009) EventHandlers, EMMA Support, WAR support, Parallelized Builds
  • GWT 1.7 (2009) Newer browser support, IE8, GPE and AppEngine
  • GWT 2.0 (2009) DevMode, DraftCompile, UIBinder, LayoutPanel, CodeSplitter, ClientBundle, CssResource
  • GWT 2.1 (2010) RequestFactory, Editor Framework, Validation, MVP, Cell Widgets
  • GWT 2.2 (2011) GWT Designer, HTML5 support
  • GWT 2.3 (2011) Better AppEngine integration
  • GWT 2.4 (2011) Maven and RequestFactory enhancements

6/31

Where we are today.

  • SDK downloaded over 1 million times
  • 100,000+ Active Developers
  • Deep Integration with Eclipse, IntelliJ, Spring STS/Roo
  • Used by Google products such as AdWords, Flights, Wallet
  • Fun things: GwtQuake, Angry Birds for the Web
  • GWT Today is a mature, high quality, code base.

7/31

Introducing GWT 2.5

  • New Compiler Optimizations
  • Closure Compiler Integration
  • Code Splitter Improvements
  • Better Stack Traces with SourceMaps
  • Real Time Compiles with SuperDevMode
  • UiBinder and CellWidget updates
  • I18N and ARIA/Accessibility improvements
  • Elemental - High performance, feature complete, HTML5

8/31

Compiler Optimizations

Default Options

14% Smaller

8% Smaller

9/31

Closure Compiler Integration

GWT 2.4 vs GWT 2.5 + Closure

20% Smaller than GWT 2.4

10/31

CodeSplitter Improvements

Problem: Shared code produces large leftovers fragment

onModuleLoad() {

GWT.runAsync { splitPoint1(); }

GWT.runAsync { splitPoint2(); }

}

splitPoint1() {

exclusiveCode

sharedCode()

}

splitPoint2() {

exclusiveCode

sharedCode()

}

Leftovers Fragment:

sharedCode() {

// could be quite large

}

11/31

CodeSplitter Improvements

Solution: Merge fragments with lots of common code

onModuleLoad() {

GWT.runAsync { splitPoint1(); }

GWT.runAsync { splitPoint2(); }

}

splitPoint1() {

exclusiveCode

sharedCode()

}

splitPoint2() {

exclusiveCode

sharedCode()

}

Leftovers Fragment (Now no longer shared outside this fragment)

sharedCode() {

// could be quite large

}

Leftovers Fragment:

// empty

12/31

39% Reduction in Initial Download Size + Leftovers

Showcase using -XfragmentMerge 23

GWT 2.4 681,802 bytes

GWT 2.5 418,932 bytes

13/31

SourceMaps

  • Bidirectional Mapping between Source Language and Compiled JavaScript
    • Supported by GWT, Closure, CoffeeScript, and eventually Dart2js
  • Emerging standard for Javascript cross-compilers
  • Permits de-obfuscation of Javascript
  • Allows GWT to construct more accurate Java stack traces when something goes wrong
  • Chrome only for now, Firefox support on the way

14/31

SuperDevMode

  • Fast Refresh without Browser Plugins
  • Compile to Javascript in seconds (typically less than 10)
  • Source level Java debugging right in your Browser
  • Even support mobile browser debugging for Chrome and Mobile Safari
  • DEMO TIME!

Where native C++ plugins fear to tread.

15/31

UiBinder and CellWidget Enhancements

  • Support for rendering CellWidget Cells via UiBinder templates
    • introduces new tagging interface UiRenderer associated with .ui.xml file
    • GWT.create() on UiRenderer generates implementation
    • Rather than bind elements, it is invoked like I18N Message or SafeHtmlTemplate classes
    • Returns HTML with values from Java objects substituted into it
  • UiBinder construction/instantiation improvements
    • New IsRenderable/RenderablePanel
    • Binds a UI in a 2-pass process
      • First generate all HTML collecting it into a large string
      • Second, install it into the DOM via innerHTML and bind elements to fields
    • Significantly reduce latency and improve rendering speed
    • Case Study: Orkut. Startup latency reduced by 20%, rendering speed 300% faster

16/31

I18 and ARIA

  • Beginnings of support for Server-Side I18N message processing with GWT.create()
  • New, up-to-date ARIA library based on latest W3C bindings

17/31

Introducing Elemental

    • Auto-generated completely from actual WebIDL browser files used by JS engines
      • Don’t wait for hand wrappers, track the actual browser vendor specs/source
    • 100% JavaScruot overlay types behind Java interfaces which “melt away” after compilation
    • Practically zero overhead
    • Every HTML5 feature supported, even the bleeding edge
      • WebGL, WebAudio, WebSockets, WebRTC, Web Intents, Shadow DOM, File API, etc
    • New Collection classes optimized for size and performance
      • map directly to underlying JS collections with no overhead
    • New JSON library, no wrappers, no overhead, high performance
      • Collections and JSON work on server in non-GWT/non-JS environments too
    • Excellent ‘thin’ library for direct mobile device development or desktop
    • DEMO

Fast, Lightweight, "to the metal" modern web programming for GWT

18/31

Improving GWT's Open Source Community

  • To make contributing features or fixes to GWT as effortless as possible
  • Maintain a high level of quality you’ve come to expect
  • Allow the community a greater level of participation in GWT’s future

19/31

The GWT Steering Committee

  • Google goes from gatekeeper to a peer amongst equals
  • Responsible for setting project Guidelines, Policies, and Philosophy
  • Determines who gets direct commit access to the master branch
  • Sets overall future roadmap
  • Drawn from mix of individual star contributors and third party vendors you’ve come to trust

20/31

Steering Committee

  • Ray Cromwell (Google)
  • Artur Signell (Vaadin)
  • Darrell Meyer (Sencha, GXT)
  • Mike Brock (RedHat, Errai/JBoss)
  • Thomas Broyer (individual contributor)
  • Stephen Haberman (Bizo)
  • Daniel Kurka (MGWT)
  • Christian Goudreau (Arcbees, GWTP Library)

21/31

Some early decisions

  • SVN -> GIT
  • Two official branches
    • Dev (trunk) - the bleeding edge, lots of commits, may break your apps
    • Beta - representing work on the next release, containing Dev work that has survived quality assurance
  • Google will be building apps from Beta, as will others
    • Will change less often then Dev
    • Have a lower probability of breakage

22/31

Where to find us

  • Website
    • http://sites.google.com/gwt-steering (not published yet, soon)
    • Will have project rules and guidelines, recent meeting minutes, etc
  • Mailing List
    • gwt-steering@googlegroups.com

New Steering Committee Resources

23/31

Sencha

Michael Mullany, CEO

24/31

Vaadin

Joonas Lehtinen, CEO

25/31

"ArcBees is really proud to be a member of the steering committee of GWT.�For us it means not only recognition for our active involvement as creator�of Gwt-Platform (GWTP), but is also an opportunity to be the voice of our�community of users and our clients at this table."

Christian Goudreau, ArcBees, CEO

26/31

"In this new process mgwt can help to make GWT become the Great Web Technology for mobile"

Daniel Kurka, mgwt

27/31

"In this new process mgwt can help to make GWT become the Great Web Technology for mobile"

Daniel Kurka, mgwt

28/31

Finally, we are hiring!

Do you want to work on GWT @ Google?

Apply at http://google.com/jobs

29/31

Q&A

30/31

<Thank You!>

31/31