comparing jvm web frameworks - Raible Designs :: Static Resources

1 downloads 228 Views 33MB Size Report
Mar 28, 2013 - web applications for the JVM? ‣ Have you ... History of JVM Web Frameworks ..... “Java remains – in
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