1 of 31

2 of 31

The History and Future of

Google Web Toolkit

Ray Cromwell

Tech Lead

3 of 31

History

4 of 31

2005 Google Maps

5 of 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 of 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 of 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 of 31

Compiler Optimizations

Default Options

14% Smaller

8% Smaller

9 of 31

Closure Compiler Integration

GWT 2.4 vs GWT 2.5 + Closure

20% Smaller than GWT 2.4

10 of 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 of 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 of 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 of 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 of 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 of 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 of 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 of 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 of 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 of 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 of 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 of 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 of 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 of 31

Sencha

Michael Mullany, CEO

24 of 31

Vaadin

Joonas Lehtinen, CEO

25 of 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 of 31

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

Daniel Kurka, mgwt

27 of 31

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

Daniel Kurka, mgwt

28 of 31

Finally, we are hiring!

Do you want to work on GWT @ Google?

Apply at http://google.com/jobs

29 of 31

Q&A

30 of 31

<Thank You!>

31 of 31