Mar 28, 2013 - Goals. ⣠Pure Web Frameworks. ⣠Full Stack Frameworks. ⣠SOFEA Frameworks. - API Frameworks. - Java
COMPARING JVM WEB FRAMEWORKS Matt Raible http://raibledesigns.com @mraible
Photos by Trish McGinity
© 2013 Raible Designs
Who is Matt Raible?
Father, Skier, Cyclist
Web Framework Connoisseur Founder of AppFuse
Blogger on raibledesigns.com © 2013 Raible Designs
Introductions ‣
Are you currently developing web applications for the JVM?
‣
Have you written web apps with Servlets or JSF?
‣
Experience with Grails, GWT, Rails, Spring MVC, Wicket, Tapestry or Play?
‣
Does anyone hate a framework? Love a framework? © 2013 Raible Designs
3
Session Agenda ‣
History of JVM Web Frameworks
‣
The Paradox of Choice
‣
Methods and Metrics
‣
Conclusion
‣
Q and A
© 2013 Raible Designs
4
History of Web Frameworks
© 2013 Raible Designs
5
History of Web Frameworks
© 2013 Raible Designs
6
History of Web Frameworks
© 2013 Raible Designs
7
Comparing Web Frameworks
© 2013 Raible Designs
8
History of Web Frameworks
© 2013 Raible Designs
9
History of Web Frameworks
© 2013 Raible Designs
10
2007
© 2013 Raible Designs
11
History of Web Frameworks
© 2013 Raible Designs
12
© 2013 Raible Designs
Today
© 2013 Raible Designs
14
Too many web frameworks?
© 2013 Raible Designs
15
Remember SOFEA?
© 2013 Raible Designs
SOFEA became a Reality
© 2013 Raible Designs
SOFEA Performance Issues
© 2013 Raible Designs
18
traditional web frameworks are still relevant
© 2013 Raible Designs
19
The Paradox of Choice
© 2013 Raible Designs
20
Good Decisions Involve 1. Figure out your goal or goals 2. Evaluate the importance of each goal 3. Array the options 4. Evaluate how likely each of the options is to meet your goals 5. Pick the winning option 6. Modify goals
© 2013 Raible Designs
21
Maximizer vs. Satisficer ‣
maximizer - tries to make best possible choice
‣
satisficer - tries to find first suitable choice
(Photo: Tori Cat at Flickr) © 2013 Raible Designs
22
How do you choose?
© 2013 Raible Designs
23
The Real Problem
© 2013 Raible Designs
24
The Real Problem
© 2013 Raible Designs
25
The Real Problem
© 2013 Raible Designs
26
© 2013 Raible Designs
How to Constrain Choices ‣
2006: Choose based on the type of app you’re developing
‣
2010: Choose based on 20 different criteria (the Matrix)
‣
2013: Narrowed it to 5
-
Community / Support
-
HTML5
-
REST
-
Mobile
-
Performance
-
Page Speed © 2013 Raible Designs
28
Predetermined Constraints ‣
Language
‣
Platform
‣
Application Type
© 2013 Raible Designs
29
Choose the JVM
© 2013 Raible Designs
30
Get Fast Hardware
© 2013 Raible Designs
31
IntelliJ
© 2013 Raible Designs
32
Goals ‣
Pure Web Frameworks
‣
Full Stack Frameworks
‣
SOFEA Frameworks
-
API Frameworks
-
JavaScript MVC Frameworks
© 2013 Raible Designs
33
Full Stack Frameworks
© 2013 Raible Designs
34
API Frameworks
© 2013 Raible Designs
35
JavaScript MVC Frameworks
© 2013 Raible Designs
36
JavaScript MVC Frameworks
© 2013 Raible Designs
37
Pure JVM Web Frameworks ‣
Apache: Wicket, Struts, Sling, Tapestry, Click
‣
GWT: SmartGWT, GXT, Vaadin, Errai
‣
JSF: Mojarra (RI), MyFaces, Tomahawk, IceFaces, RichFaces, PrimeFaces
‣
Spring MVC, Stripes, RIFE, ZK
http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java
© 2013 Raible Designs
38
Frameworks I’ve Used ‣
Apache: Wicket, Struts, Sling, Tapestry, Click
‣
GWT: SmartGWT, GXT, Vaadin, Errai
‣
JSF: Mojarra, MyFaces, Tomahawk, IceFaces, RichFaces, PrimeFaces
‣
Spring MVC, Stripes, RIFE, ZK
© 2013 Raible Designs
39
Comparison Matrix
http://bit.ly/jvm-frameworks-matrix © 2013 Raible Designs
40
Matrix Results 18
17.5
17
17
17
13.5
15.5 15.5
15
14.5 14.5
14
14
13.5 11.5
9
4.5
© 2013 Raible Designs
Lift
x Fle
F JS
s ipe Str
y Pla
2 uts Str
ck et Wi
est ry Tap
in Va ad
T GW
Ra ils
g rin Sp
Gr
ails
0
41
Matrix Results ‣
Grails (17.5)
‣
GWT (17)
‣
Ruby on Rails (17)
‣
Spring MVC (17)
‣
Vaadin and Tapestry (15.5)
‣
Wicket (15)
© 2013 Raible Designs
42
Weighted Matrix
© 2013 Raible Designs
43
Weighted Results ‣
Grails (90)
‣
Play (87.5)
‣
Spring MVC (85)
‣
Ruby on Rails (82.5)
‣
Vaadin (82.5)
‣
GWT (80)
© 2013 Raible Designs
44
David Pollack’s Lift Ratings ‣
Developer Productivity: Lift gets a 11, Rails gets a 5, most Javabased frameworks get a 1 or less.
‣
Developer Perception: Every web framework gets a 1.
‣
Learning Curve: Lift gets a 2.
‣
Job Trends, yep, it's zero. * Matt's scale is 0-1 and my ratings are on Matt's scale, except mine goes to 11. http://lift.la/my-take-on-matt-raibles-spreadsheet © 2013 Raible Designs
45
Peter Thomas’s Perfbench ‣
Seam / JSF vs. Wicket Performance Comparison
-
January 2009: Seam 2.1.1 and Wicket 1.3.5
-
Average page response time in milliseconds
© 2013 Raible Designs
46
Peter Thomas’s Perfbench ‣
On the Seam / JSF side, the 20 sessions each take up about 800 KB adding up to around 16 MB total. On the Wicket side the 20 sessions add up to around 1.5 MB.
‣
+ Lots of banter between Peter and Seam developers @ http://bit.ly/3X50Gc
© 2013 Raible Designs
47
Peter Thomas’s Perfbench ‣
Added Tapestry 5 and Grails in September 2009:
-
Grails was far more productive than Tapestry 5.
-
Grails still has some ways to go in terms of performance.
-
Overall, Wicket is fastest, with Tapestry coming a close second.
-
Wicket takes up the least amount of heap.
-
Session usage of the Seam + JSF combination is significantly higher compared to the rest.
© 2013 Raible Designs
48
World Wide Wait - Devoxx
http://www.parleys.com/d/2942 © 2013 Raible Designs
49
World Wide Wait - Devoxx
© 2013 Raible Designs
50
World Wide Wait - Devoxx
© 2013 Raible Designs
51
World Wide Wait - Devoxx
© 2013 Raible Designs
52
World Wide Wait - Devoxx
© 2013 Raible Designs
53
InfoQ’s Top 20
© 2013 Raible Designs
54
devrates.com - by rating
© 2013 Raible Designs
55
devrates.com - popular
© 2013 Raible Designs
56
Top JVM Frameworks ‣
Raible Matrix: Grails, GWT, Rails, Spring MVC
-
Weighted: Grails, Play, Spring MVC, Rails, Vaadin
‣
Peter Thomas: Wicket
‣
InfoQ: Spring MVC, Play, Grails, JSF, Struts
‣
devrates.com:
-
PrimeFaces, Grails, Tapestry, Vaadin, Wicket
© 2013 Raible Designs
57
Raible’s Recommendations ‣
Full Stack: Choose by language (JRuby, Groovy, Java or Scala)
‣
Pure Web Framework: Spring MVC, Struts 2, JSF w/ PrimeFaces, Tapestry, Wicket or Vaadin
‣
JavaScript MVC: Ember, Angular JS, Backbone
-
API Framework: Jackson + ?
© 2013 Raible Designs
58
The Problem with GWT
© 2013 Raible Designs
59
Comparison Statistics ‣
‣
Elimination Criteria
-
At least 1 release in 2012
-
At least 1 book on Amazon
-
At least 10 jobs on dice.com
-
At least 250 questions on Stack Overflow
Remove Seam (development halted)
© 2013 Raible Designs
60
Jobs on Dice.com Full Stack Frameworks, March 2013 300
225
150
75
o ing
Ro
t Lif
Pl ay
JR u
Sp r
by o
n
Gr a
Ra
ils
ils
0
© 2013 Raible Designs
61
Jobs on Dice.com Pure Web Frameworks, March 2013 600
450
300
150
© 2013 Raible Designs
din Va a
es ac eF Pr im
try Ta pe s
W
ick
et
2 ts St ru
Sp r
ing
M
VC
0
62
Jobs on Dice.com JavaScript MVC Frameworks, March 2013 300
225
150
75
© 2013 Raible Designs
r ula An g
r Em be
Ba
ck
bo
ne
0
63
Jobs on Dice.com JVM API Frameworks, March 2013 500
375
250
125
© 2013 Raible Designs
x rt. ve
Dr op
wi
za
rd
y as ST E RE
eC ch Ap a
Je r
se
y
XF
0
64
LinkedIn Skills Full Stack Frameworks, March 2013 15,000
11,250
7,500
3,750
© 2013 Raible Designs
Ra
t
JR u
by o
n
Lif
ils
o Ro ing Sp r
Pl ay
Gr a
ils
0
65
LinkedIn Skills Pure Web Frameworks, March 2013 15,000
11,250
7,500
3,750
© 2013 Raible Designs
try Ta pe s
din Va a
es ac eF
W
ick
et
2 ts St ru
Pr im
Sp r
ing
M
VC
0
66
LinkedIn Skills JavaScript MVC Frameworks, March 2013 15,000
11,250
7,500
3,750
© 2013 Raible Designs
r Em be
r ula An g
Ba
ck
bo
ne
0
67
LinkedIn Skills JVM API Frameworks, March 2013 15,000
11,250
7,500
3,750
© 2013 Raible Designs
rd Dr op
wi
za
x rt. ve
y as ST E RE
eC ch Ap a
Je r
se
y
XF
0
68
Google Trends
© 2013 Raible Designs
69
Google Trends
© 2013 Raible Designs
70
Google Trends
© 2013 Raible Designs
71
Google Trends
© 2013 Raible Designs
72
Indeed Job Trends
© 2013 Raible Designs
73
Indeed Job Trends
© 2013 Raible Designs
74
Indeed Job Trends
© 2013 Raible Designs
75
Indeed Job Trends
© 2013 Raible Designs
76
Mailing List Traffic February 2013
2340
AngularJS
1623
Play
1049
Lift
828 790 730
Grails Wicket Tapestry
432
Apache CXF
157 82 68 51
Dropwizard Struts Jersey Backbone.js 0
750
1500
2250
3000
* Frameworks not listed here use Forums, which don’t provide this data. © 2013 Raible Designs
77
StackOverflow Tagged Questions (March 28, 2013)
15,000
11,250
7,500
3,750
0
Grails
Play
Lift © 2013 Raible Designs
Spring Roo
JRuby on Rails 78
StackOverflow Tagged Questions (March 28, 2013)
10,000
7,500
5,000
2,500
0
Spring MVC
Struts 2
PrimeFaces © 2013 Raible Designs
Wicket
Vaadin
Tapestry 79
StackOverflow Tagged Questions (March 25, 2013)
8,000
6,000
4,000
2,000
0
Backbone.js
Angular JS © 2013 Raible Designs
Ember.js 80
StackOverflow Tagged Questions (March 25, 2013)
3,000
2,250
1,500
750
0
Jersey
Apache CXF
RESTEasy
© 2013 Raible Designs
Dropwizard
vert.x 81
Java Developers “Java remains – in spite of the fragmented programming language landscape – a viable, growing language.”
http://redmonk.com/sogrady/2012/02/08/language-rankings-2-2012/ © 2013 Raible Designs
82
Modern Principles
© 2013 Raible Designs
83
The Modern JVM Web Developer ‣
Starts with Fast Hardware
‣
Uses IntelliJ IDEA
‣
Leverages JavaScript, HTML5, and CSS3
‣
Creates High Performance Web Sites
‣
For Mobile Devices
‣
In the Cloud
‣
And cares about Security © 2013 Raible Designs
84
Developer Productivity
http://zeroturnaround.com/blog/ developer-productivity-report-part-1-developer-timesheet/
© 2013 Raible Designs
85
Developer Productivity
http://zeroturnaround.com/blog/ developer-productivity-report-part-3-developer-efficiency/
© 2013 Raible Designs
86
There is no “best” framework
Just lots of awesome choices... © 2013 Raible Designs
87
Don’t listen to me!
© 2013 Raible Designs
88
Choose your own! ‣
Prioritize a list of goals that are important to your application.
‣
Pick 3-4 frameworks and do a spike with each, developing the same application.
‣
Document and rank each framework against your list of goals.
‣
Calculate and choose!
‣
Don’t be a Picker.
© 2013 Raible Designs
89
Questions? Contact Information http://raibledesigns.com @mraible
Presentations http://slideshare.net/mraible
© 2013 Raible Designs
90