11. TextBox t0 = new TextBox();
TextBox t1 = new TextBox();
TextBox t2 = new TextBox();
TextBox t3 = new TextBox();
TextBox t4 = new TextBox();
VerticalPanel...
SplitPanel...
ScrollPanel
RootPanel.get().add(mainPanel);
Donnerstag, 25. April 13
18. Jan 2000 Jan 2005
XHTML 1.0
Jan 2000
HTML 4.0.1
Dez 1999
CSS 2
Mai 1998
HTML 4.0 update
April 1998
XHTML 1.1
Mai 2001
HTML 2.0
November 1995
HTML 4.0
Dezember 1997
Java EE 1.2
Dez 1999
JDK 1.1
Feb 1997
Internet Explorer 6
Aug 2001
JDK 1.0
Jan 1996
CSS 2.1
Feb 2004 – Jun 2011
CSS level 2 revision 1, often referred t
errors in CSS 2, removes poorly suppo
interoperable features and adds alread
browser extensions to the specification
with the W3C Process for standardizi
specifications, CSS 2.1 went back and
Working Draft status and Candidate R
status for many years.
J2SE 1.2
Dez 1998
J2SE 1.3
Mai 2000
CSS 1
Dez 1996
HTML 3.2
Januar 1997
Donnerstag, 25. April 13
37. if you can, do it in CSS
@-webkit-keyframes redPulse
{
from
{
box-shadow: 0px 0px 2px #ff0033;
}
50%
{
box-shadow: 0px 0px 10px #ff0033;
}
to
{
box-shadow: 0px 0px 2px #ff0033;
}
}
Donnerstag, 25. April 13
44. keep it
stupid
simple
• use PLACES framework
for main level navigation
• if you really need to, nest
activities for a second
level. try not to.
• use dialogs for user input,
showing data. dialogs are
easily reused.
Donnerstag, 25. April 13
45. Once upon a time, a
good designer does
good a good looking
design...
‣ he will be using photoshop
or dreamweaver
‣ he will not use the
software
‣ he will not build the
software
‣ he will not maintain the
software
Donnerstag, 25. April 13
59. Don‘t move your
user away from his
„PLACE“ unless
you have to.
Search DIALOG
slides in from right
side, stays on TOP
Donnerstag, 25. April 13
60. Navigation must not hurt
• The application shown uses only 3 levels of
navigation, DOES NOT NEED MORE
• PLACES used for bookmarkable entry points/
back button navigation consistency
• Activities should be STATELESS, to survive page
reloads
• Learn from OTHERS
Donnerstag, 25. April 13
61. BEFOREYOU ADD THE
LOGO TO THE TOP
HOW MANY PIXELS DO
YOUR USERS HAVE? the designer or
marketing guy
using photoshop is
probably sitting in
front of a 27“
apple cinema
display
Donnerstag, 25. April 13
63. Honor the A in AJAX
‣ Javascript does not block
Get over it
‣ Latency is not a myth
‣ Results must not arrive in the call
order
Donnerstag, 25. April 13
68. GWT-RPC
is a good
solution if
handled
with care
SomeResult someMethodName(SomeParameter spo)
GWT-RPC
binds many
methods
into one
interface
Interface
Versioning
is a
monstrous
thing
Donnerstag, 25. April 13
70. USING GENERICS FOR TYPESAFETY, GET RID OF
METHODS AND INTERFACES
Donnerstag, 25. April 13
71. <A extends Action<R>, R extends Result> R execute(A action);
now we just one interface with one method
typesafety all the way
Donnerstag, 25. April 13
86. • Every client brings his own CPU power
• The client does the page rendering
• GWT provides different ways to reduce number
of requests even more
• The server must „only“ authenticate the user
and provide the data, perform the actions
requested by the client
GWT scaling is easy...
Donnerstag, 25. April 13
88. LETS TALK HIGH TRAFFIC...
HIGH TRAFFIC IS WHEN ONE SERVER IS NOT ENOUGH
Donnerstag, 25. April 13
89. • Bandwith issues
• Connection pool bottlenecks
• Thread pool bottlenecks
• CPU bottlenecks caused by reflection API calls
• High JVM garbage collection CPU usage
HIGH TRAFFIC
PROBLEMS
Donnerstag, 25. April 13
90. NOT REALLY GWT PROBLEMS,
BUT WHAT CAN WE DO?
Donnerstag, 25. April 13
94. IMPLEMENT REAL LOAD BALANCING
EACH REQUEST GOES TO THE NEXT AVAILABLE SERVER
Donnerstag, 25. April 13
95. • Don‘t stick a session to a server.
Why send a user over and over again to a
possible overloaded server?
• Don‘t store anything on the HTTP session. Let
the load balancer balance the load.
• Session replication is expensive and does not
scale well
SCALING HOW-TO
Donnerstag, 25. April 13
97. Session Cache
Session state should not change,
just expire
Session state could contain user
id, client id, session id, user roles
If session cache becomes
bottleneck, use distributed
cache, eg. memcached
Session Cache
Session Cache
Donnerstag, 25. April 13