10. Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events
13. Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events
14. Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider which enables you to deploy and scale load-balanced cloud server networks via a unique multi-server control panel.
17. Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events
18. Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider which enables you to deploy and scale load-balanced cloud server networks via a unique multi-server control panel.
22. Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events
23. Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider which enables you to deploy and scale load-balanced cloud server networks via a unique multi-server control panel.
48. JSNI Example 2: package mypackage; public MyClass{ public static int foo() { ... } public static native void exportStaticMethod() /*-{ $wnd.foo = $entry(@mypackage.MyClass::foo()); }-*/; }
49. Deferred binding It is a pluggable compile-time type substitution and code generation mechanism.
50. Deferred binding It is a pluggable compile-time type substitution and code generation mechanism. Example: Static binding Foo f = new Foo(); Dynamic Binding Class c = Class.forName(fooImplName); Foo f = (Foo) c.newInstance(); Deferred Binding Foo f = (Foo) GWT.create(Foo.class);
71. Perfect Caching Bootstrap selection script loads Javascript ‘executable’ containing correct set of bindings for given request. <module>.nocache.js - small <md5>.cache.js – big
72. Perfect Caching Bootstrap selection script loads Javascript ‘executable’ containing correct set of bindings for given request. <module>.nocache.js - small <md5>.cache.js – big Apache HTTP server .htaccess configuration: <Files *.nocache.*> ExpiresActive on ExpiresDefault "now" Header merge Cache-Control "public, max-age=0, must-revalidate" </Files> <Files *.cache.*> ExpiresActive on ExpiresDefault "now plus 1 year" </Files>
75. Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator Example: Shape shape = new Square(4); 1) int area = shape.getArea();
76. Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator Example: Shape shape = new Square(4); 1) int area = shape.getArea(); 2) int area = Shape_getArea(shape);
77. Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator Example: Shape shape = new Square(4); 1) int area = shape.getArea(); 2) int area = Shape_getArea(shape); 3) int area = shape.len * shape.len;
78. Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator Example: Shape shape = new Square(4); 1) int area = shape.getArea(); 2) int area = Shape_getArea(shape); 3) int area = shape.len * shape.len; 4) int area = 16;
81. Image Bundling Problem: HTTP 1.1 limit: 2 outgoing connections per domain/port HTTP request has to be sent to the server for each resource (e.g. image)
82. Image Bundling Problem: HTTP 1.1 limit: 2 outgoing connections per domain/port HTTP request has to be sent to the server for each resource (e.g. image) Request for status 304 ("Not Modified")
85. Code Splitting public class Hello implements EntryPoint { public void onModuleLoad() { Button b = new Button("Click me", new ClickHandler() { public void onClick(ClickEvent event) { Window.alert("Hello, AJAX"); } }); RootPanel.get().add(b); } }
86. Code Splitting public class Hello implements EntryPoint { public void onModuleLoad() { Button b = new Button("Click me", new ClickHandler() { public void onClick(ClickEvent event) { Window.alert("Hello, AJAX"); } }); RootPanel.get().add(b); } }
87. Code Splitting public class Hello implements EntryPoint { public void onModuleLoad() { Button b = new Button("Click me", new ClickHandler() { public void onClick(ClickEvent event) { GWT.runAsync(new RunAsyncCallback() { public void onFailure(Throwable caught) { Window.alert("Code download failed"); } public void onSuccess() { Window.alert("Hello, AJAX"); } }); } }); RootPanel.get().add(b); } }