SlideShare a Scribd company logo
© 2015 IBM Corporation1
Java vs JavaScript
For Enterprise Web Applications
Chris Bailey
IBM Runtime Technologies
© 2015 IBM Corporation2
What Languages do you use?
Java JavaScript Both
0
20
40
60
80
100
120
PercentageofAudience
© 2015 IBM Corporation3
What Runtimes do you use?
Server Java Applets JS in Browser Node.js Rhino Nashorn Avatar.js
0
20
40
60
80
100
120
PercentageofAudience
© 2015 IBM Corporation4
4
Chris Bailey
IBM Runtime Monitoring and Diagnostics Architect
–14 years working with Java and JVM technologies
–14 months working with Node.js and V8
Current Role(s):
–IBM Java monitoring and diagnostics
–Node Application Metrics project lead
Node Foundation Member
Benchmarking and Performance WGs
JavaOne RockStar
Author on performance and memory analysis
baileyc@uk.ibm.com
chrisbaileyibm
cnbailey
@seabaylea
@Chris__Bailey
© 2015 IBM Corporation5

Language Adoption

Deployment Modes

Code Development

Scalability

WebApplication Performance

Under the Hood

Enterprise Architectures
Agenda
© 2015 IBM Corporation6
6
Language Adoption
© 2015 IBM Corporation7
GitHub Adoption: Java
© 2015 IBM Corporation8
GitHub Adoption: JavaScript
© 2015 IBM Corporation9
modulecounts.com
© 2015 IBM Corporation10
StackOverflow User Survey
© 2015 IBM Corporation11
Ratings based on the number of skilled engineers, courses and third party vendors.
Tiobe Community Programming Index
© 2015 IBM Corporation12
Indeed.com Job Trends: Java
© 2015 IBM Corporation13
Indeed.com Job Trends: JavaScript
© 2015 IBM Corporation14
Indeed.com Job Trends
Java
JavaScript
© 2015 IBM Corporation15

JavaScript has a large developer base
- #1 on GitHub with 45% more active repositories than Java
- #1 on modulecounts.com with 29% more NPM modules than
Maven
- #1 used language by StackOverflow survey responders
- #6 language on the Tiobe index

Java remains huge, particularly in the enterprise and on the server
- #2 on GitHub with 52% more active repositories than the next
language
- #3 on modulecounts with 73.8% more modules than the next
language
- #2 language on the Tiobe index
- #1 on indeed.com for developer jobs
Language Adoption
© 2015 IBM Corporation16
Deployment Modes
© 2015 IBM Corporation17

JavaScript is ubiquitous in the browser
- Supported in every browser
- Integration with HTML and CSS

JavaScript is not affected by negative publicity....
Unless it is absolutely necessary to run Java in web browsers, disable it as described
below, even after updating to 7u11. This will help mitigate other Java vulnerabilities that
may be discovered in the future.
This and previous Java vulnerabilities have been widely targeted by attackers, and
new Java vulnerabilities are likely to be discovered. To defend against this and future
Java vulnerabilities, consider disabling Java in web browsers…
Usage in the browser
© 2015 IBM Corporation18

Java has a long history on the server
- JPE launched in 1998

Java has rich platform support:
- Linux x86, Linux POWER, zLinux
- Windows, Mac OS, Solaris, AIX, z/OS

JavaScript is a nascent language on the server
- Limited platform support – although its growing
- No API support to interact with the OS

Part of the browser security model
- Frameworks like Node.js have changed that.
Usage on the server
© 2015 IBM Corporation19

Single Threaded Event based JavaScript framework
– Uses non-blocking asynchronous I/O

Wraps the Chrome V8 JavaScript engine with I/O interfaces
– Libuv provides interaction with OS/system

Designed to build scalable network applications
– Suited for real time delivery of data to distributed client

Available on a wide set of platforms:
- Linux on x86, ARM, Power and Z
- Windows, Mac OS, Solaris, SmartOS and AIX
libuvV8
Node Bindings
Node Standard Library
C
JavaScript
Server Side JavaScript: Node.js
© 2015 IBM Corporation20
Anatomy of a Node.js application
1. package.json
–
Tracks properties, dependencies, version info, commands, etc.
2. JavaScript source files (i.e. app.js)
•To install and execute:
> npm install
> node app.js
20
© 2015 IBM Corporation21
Code Development
© 2015 IBM Corporation22
var cluster = require('cluster');
var cpus = require('os').cpus().length;
var http = require('http');
if (cluster.isMaster) {
for (var i = 0; i < cpus; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log("Worker" + worker.pid + "died");
});
} else {
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World!n");
response.end();
}).listen(8080);
}
HTTP Server Example
© 2015 IBM Corporation23
var cluster = require('cluster');
var cpus = require('os').cpus().length;
var http = require('http');
if (cluster.isMaster) {
for (var i = 0; i < cpus; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log("Worker" + worker.pid + "died");
});
} else {
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World!n");
response.end();
}).listen(8080);
}
Clustered HTTP Server Example
© 2015 IBM Corporation24
Writing Node.js Code
CodeVolumeRelativetoJava
* based on benchmarksgame benchmarks
Node.js
Development Effort
(lower is better)
- 3x
*or other transactional service
© 2015 IBM Corporation25
Writing Node.js Code
regex-dna Spectral-norm fannkuch-redux fasta k-nucleotide Binary-trees n-body Reverse-complement
CodeVolumeRelativetoJava
* based on benchmarksgame benchmarks
Node.js
Development Effort
(lower is better)
- 3x
Avg 1/3rd
less code
*or other transactional service
© 2015 IBM Corporation26
Writing Node.js Code
regex-dna Spectral-norm fannkuch-redux fasta k-nucleotide Binary-trees n-body Reverse-complement
CodeVolumeRelativetoJava
* based on benchmarksgame benchmarks
Node.js
Development Effort
(lower is better)
- 3x
●
Node.js has higher developer productivity
Many applications developed with significantly less code
●
Rich module system simplifies development
Reduces need to develop custom code
Avg 1/3rd
less code
*or other transactional service
© 2015 IBM Corporation27
Scalability
© 2015 IBM Corporation28

One thread (or process) per connection
- Each thread waits on a response
- Scalability determined by the number
of threads

Each thread:
- consumes memory
- is relatively idle

Number of concurrent customers
determined by number of depot workers

Additional customers wait in a queue with no
response
Typical approach to I/O
© 2015 IBM Corporation29

One thread multiplexes for multiple
requests
- No waiting for a response
- Handles return from I/O when
notified

Scalability determined by:
- CPU usage
- “Back end” responsiveness

Number of concurrent customers
determined by how fast the food Server
can work

Or until the kitchen gets slammed
Asycnhronous Non-Blocking I/O
© 2015 IBM Corporation30

JavaScript is already event based in the browser
- eg. onClick and onMouseOver events

First class functions and closures fit well with events
- Easy to create and pass function callbacks
- Easy to execute callbacks in the context of the event

Node.js execution is based on an event loop
- Asynchronous I/O built in from the ground up

Node.js execution uses a single thread
- No need to worry about locking or shared data
- Most machines are now multi-CPU, so cluster capabilities are
provided
JavaScript and Asynchronous I/O
© 2015 IBM Corporation31
var http = require('http');
var server = http.createServer();
server.listen(8080);
server.on('request', function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World!n");
response.end();
});
server.on('connection', function(socket) {});
server.on('close', function() {});
server.on('connect', function(socket) {});
server.on('upgrade', function(request, socket, head) {});
server.on('clientError', function(exception, socket) {});
Event based programming
© 2015 IBM Corporation32
WebApp Performance
© 2015 IBM Corporation33

JSON serialization of a
newly instantiated object

Maps
- Key of message
- Value of Hello,
World!

Example response:
Results from TechEmpower.com Round 9 tests (2014-05-01)
JSON Serialization
© 2015 IBM Corporation34

JSON serialization of a
newly instantiated object

Maps
- Key of message
- Value of Hello,
World!

Example response:
Results from TechEmpower.com Round 9 tests (2014-05-01)
JSON Serialization
JavaScript
Java
© 2015 IBM Corporation35
JavaScript WebApp Performance
-100
-80
-60
-40
-20
0
20
40
-75
Node.js Performance
(Compared to Java)
JSON Serialization
%ageofJavaPerformance
© 2015 IBM Corporation36

Fetches single row from
simple database table

Row serialized as JSON

Example response:
Results from TechEmpower.com Round 9 tests (2014-05-01)
Single Query
© 2015 IBM Corporation37

Fetches single row from
simple database table

Row serialized as JSON

Example response:
Results from TechEmpower.com Round 9 tests (2014-05-01)
Single Query
JavaScript
Java
© 2015 IBM Corporation38
JavaScript WebApp Performance
-100
-80
-60
-40
-20
0
20
40
-60.5
Node.js Performance
(Compared to Java)
JSON Serialization
Single Query
%ageofJavaPerformance
© 2015 IBM Corporation39

Fetches multiple rows from
a simple database table

Rows serialized as JSON

Example response:
Results from TechEmpower.com Round 9 tests (2014-05-01)
Multiple Queries
© 2015 IBM Corporation40

Fetches multiple rows from
a simple database table

Rows serialized as JSON

Example response:
Results from TechEmpower.com Round 9 tests (2014-05-01)
Multiple Queries
JavaScript
Java
© 2015 IBM Corporation41
JavaScript WebApp Performance
-100
-80
-60
-40
-20
0
20
40
-18
Node.js Performance
(Compared to Java)
JSON Serialization
Single Query
Multiple Queries
%ageofJavaPerformance
© 2015 IBM Corporation42

Fetches multiple rows from
a simple database table

Converts rows to objects
and modifies one attribute
of each object

Updates each associated
row and serializes as
JSON

Example Response:
Data Updates
Results from TechEmpower.com Round 9 tests (2014-05-01)
© 2015 IBM Corporation43

Fetches multiple rows from
a simple database table

Converts rows to objects
and modifies one attribute
of each object

Updates each associated
row and serializes as
JSON

Example Response:
Data Updates
Results from TechEmpower.com Round 9 tests (2014-05-01)
JavaScript
Java
© 2015 IBM Corporation44
JavaScript WebApp Performance
-100
-80
-60
-40
-20
0
20
40
28
Node.js Performance
(Compared to Java)
JSON Serialization
Single Query
Multiple Queries
Data Updates
%ageofJavaPerformance
© 2015 IBM Corporation45

Computation speed is (much) slower than Java

I/O speed is higher than Java
JavaScript WebApp Performance
-100
-80
-60
-40
-20
0
20
40
-75 -60.5 -18
28
Node.js Performance
(Compared to Java)
JSON Serialization
Single Query
Multiple Queries
Data Updates
%ageofJavaPerformance
More
Computation
More
I/O
© 2015 IBM Corporation46
JavaScript
on the JVM?
© 2015 IBM Corporation47
Nashorn and Avatar.js

Nashorn JavaScript engine delivered in JDK8
– Utilizes new JVM level features
for performance

Avatar.js provides Node.js support on Nashorn
© 2015 IBM Corporation48
Nashorn and Avatar.js

Nashorn JavaScript engine delivered in JDK8
– Utilizes new JVM level features
for performance

Avatar.js provides Node.js support on Nashorn

Results of “Octane” JavaScript benchmark*:
– Node.js is 4.8x faster
– Avatar.js is >10x larger
* Using Java 8 pre-u20
© 2015 IBM Corporation49
Nashorn and Avatar.js

Nashorn JavaScript engine delivered in JDK8
– Utilizes new JVM level features
for performance

Avatar.js provides Node.js support on Nashorn

Results of “Octane” JavaScript benchmark*:
– Node.js is 4.8x faster
– Avatar.js is >10x larger
* Using Java 8 pre-u40
Feb 12th
, 2015: Avatar is “put on hold”
https://blogs.oracle.com/theaquarium/entry/project_avatar_update
© 2015 IBM Corporation50
JavaScript Performance
Under the Hood
© 2015 IBM Corporation51

Dynamic nature of JavaScript makes JIT optimizations more difficult
– Any variable could be a function or data
– Variables must be tested to determine how to handle handle them
– Variables can change, so what worked previously many not apply in future

Example: the use of '+':
• number + number → addition
• string involved? → concatenation
• objects involved? → convert to primitives then addition or
concatenation
• Functions involved? → ?
JIT Compilation
© 2015 IBM Corporation52
Execution flow for '+' operator
int a
int b
int c = a + b
Addition
Return Result
Java
© 2015 IBM Corporation53
Execution flow for '+' operator
int a
int b
int c = a + b
Addition
Return Result
var a
var b
var c = a + b
First Time?
NO
Use Previous
Types
Worked?
Return Result
YES
Type of A?
NO
YES
Type of B?String Concatenate
String
or
Number
Number Type of B? Number Addition
UndefinedString
Java JavaScript
© 2015 IBM Corporation54

Dynamically typed languages are harder to manage under the hood

They subsequently have lower runtime performance for computational tasks

Highlighted in TechEmpower benchmarks:
Dynamically vs Statically Types Languages
-70
-60
-50
-40
-30
-20
-10
0
Dynamic vs Statically Typed Language Performance
JSON
Single
Multi
Updates
Bestdynamiccomparedtobeststaticasbaseline
© 2015 IBM Corporation55
Writing
Node.js Code
© 2015 IBM Corporation56
Not So Easy: JavaScript Syntax Fun
> '5' – 3
2 // Weak typing, implicit conversion
> '5' + 3
'53' // ...but not consistent
> '5' – '4'
1 // String minus String = Integer??
> '5' + + '4'
54 // Multiple +'s are ok
> 'Hello' + 'World'
'HelloWorld' // Ok, that's expected
> 'Hello' + + 'World'
'HelloNaN' // ...but that isn't
© 2015 IBM Corporation57
Not So Easy: JavaScript Syntax Fun
> '5' – 3
2 // Weak typing, implicit conversion
> '5' + 3
'53' // ...but not consistent
> '5' – '4'
1 // String minus String = Integer??
> '5' + + '4'
54 // Multiple +'s are ok
> 'Hello' + 'World'
'HelloWorld' // Ok, that's expected
> 'Hello' + + 'World'
'HelloNaN' // ...but that isn't
© 2015 IBM Corporation58
Not So Easy: JavaScript Syntax Fun
> '5' – 3
2 // Weak typing, implicit conversion
> '5' + 3
'53' // ...but not consistent
> '5' – '4'
1 // String minus String = Integer??
> '5' + + '4'
54 // Multiple +'s are ok
> 'Hello' + 'World'
'HelloWorld' // Ok, that's expected
> 'Hello' + + 'World'
'HelloNaN' // ...but that isn't
© 2015 IBM Corporation59
Not So Easy: JavaScript Syntax Fun
> '5' – 3
2 // Weak typing, implicit conversion
> '5' + 3
'53' // ...but not consistent
> '5' – '4'
1 // String minus String = Integer??
> '5' + + '4'
54 // Multiple +'s are ok
> 'Hello' + 'World'
'HelloWorld' // Ok, that's expected
> 'Hello' + + 'World'
'HelloNaN' // ...but that isn't
© 2015 IBM Corporation60
Not So Easy: JavaScript Syntax Fun
> '5' – 3
2 // Weak typing, implicit conversion
> '5' + 3
'53' // ...but not consistent
> '5' – '4'
1 // String minus String = Integer??
> '5' + + '4'
54 // Multiple +'s are ok
> 'Hello' + 'World'
'HelloWorld' // Ok, that's expected
> 'Hello' + + 'World'
'HelloNaN' // ...but that isn't
© 2015 IBM Corporation61
Not So Easy: JavaScript Syntax Fun
> '5' – 3
2 // Weak typing, implicit conversion
> '5' + 3
'53' // ...but not consistent
> '5' – '4'
1 // String minus String = Integer??
> '5' + + '4'
54 // Multiple +'s are ok
> 'Hello' + 'World'
'HelloWorld' // Ok, that's expected
> 'Hello' + + 'World'
'HelloNaN' // ...but that isn't
© 2015 IBM Corporation62
Not So Easy: JavaScript Syntax Fun
> '5' – 3
2 // Weak typing, implicit conversion
> '5' + 3
'53' // ...but not consistent
> '5' – '4'
1 // String minus String = Integer??
> '5' + + '4'
54 // Multiple +'s are ok
> 'Hello' + 'World'
'HelloWorld' // Ok, that's expected
> 'Hello' + + 'World'
'HelloNaN' // ...but that isn't
© 2015 IBM Corporation63
Not So Easy: JavaScript Syntax Fun
> '5' – 3
2 // Weak typing, implicit conversion
> '5' + 3
'53' // ...but not consistent
> '5' – '4'
1 // String minus String = Integer??
> '5' + + '4'
54 // Multiple +'s are ok
> 'Hello' + 'World'
'HelloWorld' // Ok, that's expected
> 'Hello' + + 'World'
'HelloNaN' // ...but that isn't
© 2015 IBM Corporation64
Not So Easy: JavaScript Syntax Fun
> '5' – 3
2 // Weak typing, implicit conversion
> '5' + 3
'53' // ...but not consistent
> '5' – '4'
1 // String minus String = Integer??
> '5' + + '4'
54 // Multiple +'s are ok
> 'Hello' + 'World'
'HelloWorld' // Ok, that's expected
> 'Hello' + + 'World'
'HelloNaN' // ...but that isn't
© 2015 IBM Corporation65
Not So Easy: JavaScript Syntax Fun
> '5' – 3
2 // Weak typing, implicit conversion
> '5' + 3
'53' // ...but not consistent
> '5' – '4'
1 // String minus String = Integer??
> '5' + + '4'
54 // Multiple +'s are ok
> 'Hello' + 'World'
'HelloWorld' // Ok, that's expected
> 'Hello' + + 'World'
'HelloNaN' // ...but that isn't
© 2015 IBM Corporation66
Not So Easy: JavaScript Syntax Fun
> '5' – 3
2 // Weak typing, implicit conversion
> '5' + 3
'53' // ...but not consistent
> '5' – '4'
1 // String minus String = Integer??
> '5' + + '4'
54 // Multiple +'s are ok
> 'Hello' + 'World'
'HelloWorld' // Ok, that's expected
> 'Hello' + + 'World'
'HelloNaN' // ...but that isn't
© 2015 IBM Corporation67
Not So Easy: JavaScript Syntax Fun
> '5' – 3
2 // Weak typing, implicit conversion
> '5' + 3
'53' // ...but not consistent
> '5' – '4'
1 // String minus String = Integer??
> '5' + + '4'
54 // Multiple +'s are ok
> 'Hello' + 'World'
'HelloWorld' // Ok, that's expected
> 'Hello' + + 'World'
'HelloNaN' // ...but that isn't
© 2015 IBM Corporation68
Not So Easy: JavaScript Syntax Fun
> '5' + - '5'
'5-2' // I can just about see that works
> var x = 3
undefined
> '5' – x + x
5 // Ok, that makes sense
> var x = 3
undefined
> '5' + x - x
50 // What???
© 2015 IBM Corporation69
Not So Easy: JavaScript Syntax Fun
> '5' + - '5'
'5-5' // I can just about see that works
> var x = 3
undefined
> '5' – x + x
5 // Ok, that makes sense
> var x = 3
undefined
> '5' + x - x
50 // What???
© 2015 IBM Corporation70
Not So Easy: JavaScript Syntax Fun
> '5' + - '5'
'5-2' // I can just about see that works
> var x = 3
undefined
> '5' – x + x
5 // Ok, that makes sense
> var x = 3
undefined
> '5' + x - x
50 // What???
© 2015 IBM Corporation71
Not So Easy: JavaScript Syntax Fun
> '5' + - '5'
'5-2' // I can just about see that works
> var x = 3
undefined
> '5' – x + x
5 // Ok, that makes sense
> var x = 3
undefined
> '5' + x - x
50 // What???
© 2015 IBM Corporation72
Not So Easy: JavaScript Syntax Fun
> '5' + - '5'
'5-2' // I can just about see that works
> var x = 3
undefined
> '5' – x + x
5 // Ok, that makes sense
> var x = 3
undefined
> '5' + x - x
50 // What???
© 2015 IBM Corporation73
Not So Easy: JavaScript Syntax Fun
> '5' + - '5'
'5-2' // I can just about see that works
> var x = 3
undefined
> '5' – x + x
5 // Ok, that makes sense
> var x = 3
undefined
> '5' + x - x
50 // What???
© 2015 IBM Corporation74
(Micro)Service
Topologies
© 2015 IBM Corporation75
Enterprise Application Platform – Web Applications
Operations and Management
Admin Analytics
LoadBalancer
LoadBalancer
HTTP
Monitoring ScalingAnalytics Diagnostics
© 2015 IBM Corporation76
Questions
© 2015 IBM Corporation77

More Related Content

What's hot

JavaScript in Universal Windows Platform apps
JavaScript in Universal Windows Platform appsJavaScript in Universal Windows Platform apps
JavaScript in Universal Windows Platform apps
Timmy Kokke
 
Comparison Between React & Angular JS Frameworks
Comparison Between React & Angular JS FrameworksComparison Between React & Angular JS Frameworks
Comparison Between React & Angular JS Frameworks
SNAKINDIA CONSULTANCY
 
Making Single Page Applications (SPA) faster
Making Single Page Applications (SPA) faster Making Single Page Applications (SPA) faster
Making Single Page Applications (SPA) faster
Boris Livshutz
 
Javantura 2014 - Java 8 JavaScript Nashorn
Javantura 2014 - Java 8 JavaScript NashornJavantura 2014 - Java 8 JavaScript Nashorn
Javantura 2014 - Java 8 JavaScript NashornMiroslav Resetar
 
Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...
Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...
Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...
CodeValue
 
MEAN stack
MEAN stackMEAN stack
MEAN stack
Iryney Baran
 
Web Applications Development with MEAN Stack
Web Applications Development with MEAN StackWeb Applications Development with MEAN Stack
Web Applications Development with MEAN Stack
Shailendra Chauhan
 
Windows Store Apps: Tips & Tricks
Windows Store Apps: Tips & TricksWindows Store Apps: Tips & Tricks
Windows Store Apps: Tips & TricksRobert MacLean
 
GeorgeTechCVUPDDEC2015
GeorgeTechCVUPDDEC2015GeorgeTechCVUPDDEC2015
GeorgeTechCVUPDDEC2015George Nicol
 
Developing dynamic ui using react
Developing dynamic ui using reactDeveloping dynamic ui using react
Developing dynamic ui using react
sushmita bhor
 
Frameworks in java
Frameworks in javaFrameworks in java
Frameworks in java
Darshan Patel
 
WebSite development using WinJS
WebSite development using WinJSWebSite development using WinJS
WebSite development using WinJS
Alexandre Marreiros
 
Build fast word press site in react in 30 mins with frontity
Build fast word press site in react in 30 mins   with frontityBuild fast word press site in react in 30 mins   with frontity
Build fast word press site in react in 30 mins with frontity
Imran Sayed
 
Getting Started with J2EE, A Roadmap
Getting Started with J2EE, A RoadmapGetting Started with J2EE, A Roadmap
Getting Started with J2EE, A Roadmap
Makarand Bhatambarekar
 
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Mean stack
Mean stackMean stack
Mean stack
kalyankumar836878
 
Get MEAN! Node.js and the MEAN stack
Get MEAN!  Node.js and the MEAN stackGet MEAN!  Node.js and the MEAN stack
Get MEAN! Node.js and the MEAN stack
Nicholas McClay
 
Angular js Fundamentals
Angular js FundamentalsAngular js Fundamentals
Angular js Fundamentals
Renien Joseph
 
Rise and Fall of the Frontend Developer
Rise and Fall of the Frontend DeveloperRise and Fall of the Frontend Developer
Rise and Fall of the Frontend Developer
Rafael Casuso Romate
 
Kick start your journey as mern stack developer
Kick start your journey as mern stack developerKick start your journey as mern stack developer
Kick start your journey as mern stack developer
ShrutiPanjwani1
 

What's hot (20)

JavaScript in Universal Windows Platform apps
JavaScript in Universal Windows Platform appsJavaScript in Universal Windows Platform apps
JavaScript in Universal Windows Platform apps
 
Comparison Between React & Angular JS Frameworks
Comparison Between React & Angular JS FrameworksComparison Between React & Angular JS Frameworks
Comparison Between React & Angular JS Frameworks
 
Making Single Page Applications (SPA) faster
Making Single Page Applications (SPA) faster Making Single Page Applications (SPA) faster
Making Single Page Applications (SPA) faster
 
Javantura 2014 - Java 8 JavaScript Nashorn
Javantura 2014 - Java 8 JavaScript NashornJavantura 2014 - Java 8 JavaScript Nashorn
Javantura 2014 - Java 8 JavaScript Nashorn
 
Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...
Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...
Amir Zuker: Building web apps with web assembly and blazor - Architecture Nex...
 
MEAN stack
MEAN stackMEAN stack
MEAN stack
 
Web Applications Development with MEAN Stack
Web Applications Development with MEAN StackWeb Applications Development with MEAN Stack
Web Applications Development with MEAN Stack
 
Windows Store Apps: Tips & Tricks
Windows Store Apps: Tips & TricksWindows Store Apps: Tips & Tricks
Windows Store Apps: Tips & Tricks
 
GeorgeTechCVUPDDEC2015
GeorgeTechCVUPDDEC2015GeorgeTechCVUPDDEC2015
GeorgeTechCVUPDDEC2015
 
Developing dynamic ui using react
Developing dynamic ui using reactDeveloping dynamic ui using react
Developing dynamic ui using react
 
Frameworks in java
Frameworks in javaFrameworks in java
Frameworks in java
 
WebSite development using WinJS
WebSite development using WinJSWebSite development using WinJS
WebSite development using WinJS
 
Build fast word press site in react in 30 mins with frontity
Build fast word press site in react in 30 mins   with frontityBuild fast word press site in react in 30 mins   with frontity
Build fast word press site in react in 30 mins with frontity
 
Getting Started with J2EE, A Roadmap
Getting Started with J2EE, A RoadmapGetting Started with J2EE, A Roadmap
Getting Started with J2EE, A Roadmap
 
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
 
Mean stack
Mean stackMean stack
Mean stack
 
Get MEAN! Node.js and the MEAN stack
Get MEAN!  Node.js and the MEAN stackGet MEAN!  Node.js and the MEAN stack
Get MEAN! Node.js and the MEAN stack
 
Angular js Fundamentals
Angular js FundamentalsAngular js Fundamentals
Angular js Fundamentals
 
Rise and Fall of the Frontend Developer
Rise and Fall of the Frontend DeveloperRise and Fall of the Frontend Developer
Rise and Fall of the Frontend Developer
 
Kick start your journey as mern stack developer
Kick start your journey as mern stack developerKick start your journey as mern stack developer
Kick start your journey as mern stack developer
 

Viewers also liked

The Unit Test is dead. Long live the Unit Test! - Colin Vipurs
The Unit Test is dead. Long live the Unit Test! - Colin VipursThe Unit Test is dead. Long live the Unit Test! - Colin Vipurs
The Unit Test is dead. Long live the Unit Test! - Colin Vipurs
JAXLondon_Conference
 
Fighting for the Future of the Social Web: Selling Out and Opening Up
Fighting for the Future of the Social Web: Selling Out and Opening UpFighting for the Future of the Social Web: Selling Out and Opening Up
Fighting for the Future of the Social Web: Selling Out and Opening Up
Joseph Smarr
 
(DEV306) Building Cross-Platform Applications Using the AWS SDK for JavaScrip...
(DEV306) Building Cross-Platform Applications Using the AWS SDK for JavaScrip...(DEV306) Building Cross-Platform Applications Using the AWS SDK for JavaScrip...
(DEV306) Building Cross-Platform Applications Using the AWS SDK for JavaScrip...
Amazon Web Services
 
JavaScript Libraries: The Big Picture
JavaScript Libraries: The Big PictureJavaScript Libraries: The Big Picture
JavaScript Libraries: The Big PictureSimon Willison
 
Javascript Libraries & Frameworks | Connor Goddard
Javascript Libraries & Frameworks | Connor GoddardJavascript Libraries & Frameworks | Connor Goddard
Javascript Libraries & Frameworks | Connor GoddardConnor Goddard
 
Javascript libraries
Javascript librariesJavascript libraries
Javascript libraries
Dumindu Pahalawatta
 
JavaOne 2014: Java vs JavaScript
JavaOne 2014:   Java vs JavaScriptJavaOne 2014:   Java vs JavaScript
JavaOne 2014: Java vs JavaScript
Chris Bailey
 
JavaScript for Enterprise Applications
JavaScript for Enterprise ApplicationsJavaScript for Enterprise Applications
JavaScript for Enterprise Applications
Piyush Katariya
 
Difference between java script and jquery
Difference between java script and jqueryDifference between java script and jquery
Difference between java script and jquery
Umar Ali
 
Choosing Javascript Libraries to Adopt for Development
Choosing Javascript Libraries to Adopt for DevelopmentChoosing Javascript Libraries to Adopt for Development
Choosing Javascript Libraries to Adopt for Development
Edward Apostol
 
10 Building Blocks for Enterprise JavaScript
10 Building Blocks for Enterprise JavaScript10 Building Blocks for Enterprise JavaScript
10 Building Blocks for Enterprise JavaScript
Geertjan Wielenga
 
Webinar AWS 201 Delivering apps without servers
Webinar AWS 201 Delivering apps without serversWebinar AWS 201 Delivering apps without servers
Webinar AWS 201 Delivering apps without servers
Amazon Web Services
 
How to Successfully Implement Headless Drupal
How to Successfully Implement Headless DrupalHow to Successfully Implement Headless Drupal
How to Successfully Implement Headless Drupal
Acquia
 
Tools For jQuery Application Architecture (Extended Slides)
Tools For jQuery Application Architecture (Extended Slides)Tools For jQuery Application Architecture (Extended Slides)
Tools For jQuery Application Architecture (Extended Slides)
Addy Osmani
 
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
FITC
 
Microservice Architecture on AWS using AWS Lambda and Docker Containers
Microservice Architecture on AWS using AWS Lambda and Docker ContainersMicroservice Architecture on AWS using AWS Lambda and Docker Containers
Microservice Architecture on AWS using AWS Lambda and Docker Containers
Danilo Poccia
 
Scalable JavaScript Application Architecture
Scalable JavaScript Application ArchitectureScalable JavaScript Application Architecture
Scalable JavaScript Application Architecture
Nicholas Zakas
 
AWS Architecture Case Study: Real-Time Bidding
AWS Architecture Case Study: Real-Time BiddingAWS Architecture Case Study: Real-Time Bidding
AWS Architecture Case Study: Real-Time Bidding
Amazon Web Services
 

Viewers also liked (18)

The Unit Test is dead. Long live the Unit Test! - Colin Vipurs
The Unit Test is dead. Long live the Unit Test! - Colin VipursThe Unit Test is dead. Long live the Unit Test! - Colin Vipurs
The Unit Test is dead. Long live the Unit Test! - Colin Vipurs
 
Fighting for the Future of the Social Web: Selling Out and Opening Up
Fighting for the Future of the Social Web: Selling Out and Opening UpFighting for the Future of the Social Web: Selling Out and Opening Up
Fighting for the Future of the Social Web: Selling Out and Opening Up
 
(DEV306) Building Cross-Platform Applications Using the AWS SDK for JavaScrip...
(DEV306) Building Cross-Platform Applications Using the AWS SDK for JavaScrip...(DEV306) Building Cross-Platform Applications Using the AWS SDK for JavaScrip...
(DEV306) Building Cross-Platform Applications Using the AWS SDK for JavaScrip...
 
JavaScript Libraries: The Big Picture
JavaScript Libraries: The Big PictureJavaScript Libraries: The Big Picture
JavaScript Libraries: The Big Picture
 
Javascript Libraries & Frameworks | Connor Goddard
Javascript Libraries & Frameworks | Connor GoddardJavascript Libraries & Frameworks | Connor Goddard
Javascript Libraries & Frameworks | Connor Goddard
 
Javascript libraries
Javascript librariesJavascript libraries
Javascript libraries
 
JavaOne 2014: Java vs JavaScript
JavaOne 2014:   Java vs JavaScriptJavaOne 2014:   Java vs JavaScript
JavaOne 2014: Java vs JavaScript
 
JavaScript for Enterprise Applications
JavaScript for Enterprise ApplicationsJavaScript for Enterprise Applications
JavaScript for Enterprise Applications
 
Difference between java script and jquery
Difference between java script and jqueryDifference between java script and jquery
Difference between java script and jquery
 
Choosing Javascript Libraries to Adopt for Development
Choosing Javascript Libraries to Adopt for DevelopmentChoosing Javascript Libraries to Adopt for Development
Choosing Javascript Libraries to Adopt for Development
 
10 Building Blocks for Enterprise JavaScript
10 Building Blocks for Enterprise JavaScript10 Building Blocks for Enterprise JavaScript
10 Building Blocks for Enterprise JavaScript
 
Webinar AWS 201 Delivering apps without servers
Webinar AWS 201 Delivering apps without serversWebinar AWS 201 Delivering apps without servers
Webinar AWS 201 Delivering apps without servers
 
How to Successfully Implement Headless Drupal
How to Successfully Implement Headless DrupalHow to Successfully Implement Headless Drupal
How to Successfully Implement Headless Drupal
 
Tools For jQuery Application Architecture (Extended Slides)
Tools For jQuery Application Architecture (Extended Slides)Tools For jQuery Application Architecture (Extended Slides)
Tools For jQuery Application Architecture (Extended Slides)
 
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
 
Microservice Architecture on AWS using AWS Lambda and Docker Containers
Microservice Architecture on AWS using AWS Lambda and Docker ContainersMicroservice Architecture on AWS using AWS Lambda and Docker Containers
Microservice Architecture on AWS using AWS Lambda and Docker Containers
 
Scalable JavaScript Application Architecture
Scalable JavaScript Application ArchitectureScalable JavaScript Application Architecture
Scalable JavaScript Application Architecture
 
AWS Architecture Case Study: Real-Time Bidding
AWS Architecture Case Study: Real-Time BiddingAWS Architecture Case Study: Real-Time Bidding
AWS Architecture Case Study: Real-Time Bidding
 

Similar to Java vs. Java Script for enterprise web applications - Chris Bailey

IBM InterConnect: Java vs JavaScript for Enterprise WebApps
IBM InterConnect: Java vs JavaScript for Enterprise WebAppsIBM InterConnect: Java vs JavaScript for Enterprise WebApps
IBM InterConnect: Java vs JavaScript for Enterprise WebApps
Chris Bailey
 
QCon Shanghai: Trends in Application Development
QCon Shanghai: Trends in Application DevelopmentQCon Shanghai: Trends in Application Development
QCon Shanghai: Trends in Application Development
Chris Bailey
 
AJppt.pptx
AJppt.pptxAJppt.pptx
AJppt.pptx
SachinSingh217687
 
Node.js vs Play Framework
Node.js vs Play FrameworkNode.js vs Play Framework
Node.js vs Play Framework
Yevgeniy Brikman
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talk
Aarti Parikh
 
Event-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineEvent-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 Engine
Ricardo Silva
 
01 overview-servlets-and-environment-setup
01 overview-servlets-and-environment-setup01 overview-servlets-and-environment-setup
01 overview-servlets-and-environment-setupdhrubo kayal
 
Java on Windows Azure
Java on Windows AzureJava on Windows Azure
Java on Windows Azure
David Chou
 
NodeJS
NodeJSNodeJS
NodeJS
Alok Guha
 
Node.js Workshop
Node.js WorkshopNode.js Workshop
Node.js Workshop
Quhan Arunasalam
 
Web II - 01 - Introduction to server-side development
Web II - 01 - Introduction to server-side developmentWeb II - 01 - Introduction to server-side development
Web II - 01 - Introduction to server-side development
Randy Connolly
 
Choose Your Own Adventure with JHipster & Kubernetes - Denver JUG 2020
Choose Your Own Adventure with JHipster & Kubernetes - Denver JUG 2020Choose Your Own Adventure with JHipster & Kubernetes - Denver JUG 2020
Choose Your Own Adventure with JHipster & Kubernetes - Denver JUG 2020
Matt Raible
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
orkaplan
 
StrongLoop Overview
StrongLoop OverviewStrongLoop Overview
StrongLoop Overview
Shubhra Kar
 
CloudConnect 2011 - Building Highly Scalable Java Applications on Windows Azure
CloudConnect 2011 - Building Highly Scalable Java Applications on Windows AzureCloudConnect 2011 - Building Highly Scalable Java Applications on Windows Azure
CloudConnect 2011 - Building Highly Scalable Java Applications on Windows Azure
David Chou
 
Node.js primer for ITE students
Node.js primer for ITE studentsNode.js primer for ITE students
Node.js primer for ITE students
Quhan Arunasalam
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.js
soft-shake.ch
 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backend
David Padbury
 
Web assembly with PWA
Web assembly with PWA Web assembly with PWA
Web assembly with PWA
Shashank Sharma
 

Similar to Java vs. Java Script for enterprise web applications - Chris Bailey (20)

IBM InterConnect: Java vs JavaScript for Enterprise WebApps
IBM InterConnect: Java vs JavaScript for Enterprise WebAppsIBM InterConnect: Java vs JavaScript for Enterprise WebApps
IBM InterConnect: Java vs JavaScript for Enterprise WebApps
 
QCon Shanghai: Trends in Application Development
QCon Shanghai: Trends in Application DevelopmentQCon Shanghai: Trends in Application Development
QCon Shanghai: Trends in Application Development
 
AJppt.pptx
AJppt.pptxAJppt.pptx
AJppt.pptx
 
Node.js vs Play Framework
Node.js vs Play FrameworkNode.js vs Play Framework
Node.js vs Play Framework
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talk
 
Event-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineEvent-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 Engine
 
Proposal
ProposalProposal
Proposal
 
01 overview-servlets-and-environment-setup
01 overview-servlets-and-environment-setup01 overview-servlets-and-environment-setup
01 overview-servlets-and-environment-setup
 
Java on Windows Azure
Java on Windows AzureJava on Windows Azure
Java on Windows Azure
 
NodeJS
NodeJSNodeJS
NodeJS
 
Node.js Workshop
Node.js WorkshopNode.js Workshop
Node.js Workshop
 
Web II - 01 - Introduction to server-side development
Web II - 01 - Introduction to server-side developmentWeb II - 01 - Introduction to server-side development
Web II - 01 - Introduction to server-side development
 
Choose Your Own Adventure with JHipster & Kubernetes - Denver JUG 2020
Choose Your Own Adventure with JHipster & Kubernetes - Denver JUG 2020Choose Your Own Adventure with JHipster & Kubernetes - Denver JUG 2020
Choose Your Own Adventure with JHipster & Kubernetes - Denver JUG 2020
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
 
StrongLoop Overview
StrongLoop OverviewStrongLoop Overview
StrongLoop Overview
 
CloudConnect 2011 - Building Highly Scalable Java Applications on Windows Azure
CloudConnect 2011 - Building Highly Scalable Java Applications on Windows AzureCloudConnect 2011 - Building Highly Scalable Java Applications on Windows Azure
CloudConnect 2011 - Building Highly Scalable Java Applications on Windows Azure
 
Node.js primer for ITE students
Node.js primer for ITE studentsNode.js primer for ITE students
Node.js primer for ITE students
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.js
 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backend
 
Web assembly with PWA
Web assembly with PWA Web assembly with PWA
Web assembly with PWA
 

More from JAXLondon_Conference

Cassandra and Spark - Tim Berglund
Cassandra and Spark - Tim BerglundCassandra and Spark - Tim Berglund
Cassandra and Spark - Tim Berglund
JAXLondon_Conference
 
All change! How the new Economics of Cloud will make you think differently ab...
All change! How the new Economics of Cloud will make you think differently ab...All change! How the new Economics of Cloud will make you think differently ab...
All change! How the new Economics of Cloud will make you think differently ab...
JAXLondon_Conference
 
Stop guessing, start testing – mobile testing done right - Timo Euteneuer
Stop guessing, start testing – mobile testing done right - Timo EuteneuerStop guessing, start testing – mobile testing done right - Timo Euteneuer
Stop guessing, start testing – mobile testing done right - Timo Euteneuer
JAXLondon_Conference
 
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel UrmaJava Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
JAXLondon_Conference
 
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel UrmaJava Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
JAXLondon_Conference
 
Smoothing the continuous delivery path – a tale of two teams - Lyndsay Prewer
Smoothing the continuous delivery path – a tale of two teams - Lyndsay PrewerSmoothing the continuous delivery path – a tale of two teams - Lyndsay Prewer
Smoothing the continuous delivery path – a tale of two teams - Lyndsay Prewer
JAXLondon_Conference
 
VC from the inside - a techie's perspective - Adrian Colyer
VC from the inside - a techie's perspective - Adrian ColyerVC from the inside - a techie's perspective - Adrian Colyer
VC from the inside - a techie's perspective - Adrian Colyer
JAXLondon_Conference
 
Use your type system; write less code - Samir Talwar
Use your type system; write less code - Samir TalwarUse your type system; write less code - Samir Talwar
Use your type system; write less code - Samir Talwar
JAXLondon_Conference
 
Thinking fast and slow with software development - Daniel Bryant
Thinking fast and slow with software development - Daniel BryantThinking fast and slow with software development - Daniel Bryant
Thinking fast and slow with software development - Daniel Bryant
JAXLondon_Conference
 
The java memory model and the mutability matrix of pain - Jamie Allen
The java memory model and the mutability matrix of pain - Jamie AllenThe java memory model and the mutability matrix of pain - Jamie Allen
The java memory model and the mutability matrix of pain - Jamie Allen
JAXLondon_Conference
 
The art of shifting perspectives - Rachel Davies
The art of shifting perspectives - Rachel DaviesThe art of shifting perspectives - Rachel Davies
The art of shifting perspectives - Rachel Davies
JAXLondon_Conference
 
Spring Boot in the Web Tier - Dave Syer
Spring Boot in the Web Tier - Dave SyerSpring Boot in the Web Tier - Dave Syer
Spring Boot in the Web Tier - Dave Syer
JAXLondon_Conference
 
Microservices from dream to reality in an hour - Dr. Holly Cummins
Microservices from dream to reality in an hour - Dr. Holly CumminsMicroservices from dream to reality in an hour - Dr. Holly Cummins
Microservices from dream to reality in an hour - Dr. Holly Cummins
JAXLondon_Conference
 
Love your architecture - Alexander von Zitzewitz
Love your architecture - Alexander von ZitzewitzLove your architecture - Alexander von Zitzewitz
Love your architecture - Alexander von Zitzewitz
JAXLondon_Conference
 
Lambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter LawreyLambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter Lawrey
JAXLondon_Conference
 
Java generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
Java generics past, present and future - Raoul-Gabriel Urma, Richard WarburtonJava generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
Java generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
JAXLondon_Conference
 
Java 8 best practices - Stephen Colebourne
Java 8 best practices - Stephen ColebourneJava 8 best practices - Stephen Colebourne
Java 8 best practices - Stephen Colebourne
JAXLondon_Conference
 
Intuitions for scaling data centric architectures - Benjamin Stopford
Intuitions for scaling data centric architectures - Benjamin StopfordIntuitions for scaling data centric architectures - Benjamin Stopford
Intuitions for scaling data centric architectures - Benjamin Stopford
JAXLondon_Conference
 
Hybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
Hybrid solutions – combining in memory solutions with SSD - Christos ErotocritouHybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
Hybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
JAXLondon_Conference
 
How to defeat feature gluttony - Kasia Mrowca
How to defeat feature gluttony - Kasia MrowcaHow to defeat feature gluttony - Kasia Mrowca
How to defeat feature gluttony - Kasia Mrowca
JAXLondon_Conference
 

More from JAXLondon_Conference (20)

Cassandra and Spark - Tim Berglund
Cassandra and Spark - Tim BerglundCassandra and Spark - Tim Berglund
Cassandra and Spark - Tim Berglund
 
All change! How the new Economics of Cloud will make you think differently ab...
All change! How the new Economics of Cloud will make you think differently ab...All change! How the new Economics of Cloud will make you think differently ab...
All change! How the new Economics of Cloud will make you think differently ab...
 
Stop guessing, start testing – mobile testing done right - Timo Euteneuer
Stop guessing, start testing – mobile testing done right - Timo EuteneuerStop guessing, start testing – mobile testing done right - Timo Euteneuer
Stop guessing, start testing – mobile testing done right - Timo Euteneuer
 
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel UrmaJava Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
 
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel UrmaJava Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
Java Generics Past, Present and Future - Richard Warburton, Raoul-Gabriel Urma
 
Smoothing the continuous delivery path – a tale of two teams - Lyndsay Prewer
Smoothing the continuous delivery path – a tale of two teams - Lyndsay PrewerSmoothing the continuous delivery path – a tale of two teams - Lyndsay Prewer
Smoothing the continuous delivery path – a tale of two teams - Lyndsay Prewer
 
VC from the inside - a techie's perspective - Adrian Colyer
VC from the inside - a techie's perspective - Adrian ColyerVC from the inside - a techie's perspective - Adrian Colyer
VC from the inside - a techie's perspective - Adrian Colyer
 
Use your type system; write less code - Samir Talwar
Use your type system; write less code - Samir TalwarUse your type system; write less code - Samir Talwar
Use your type system; write less code - Samir Talwar
 
Thinking fast and slow with software development - Daniel Bryant
Thinking fast and slow with software development - Daniel BryantThinking fast and slow with software development - Daniel Bryant
Thinking fast and slow with software development - Daniel Bryant
 
The java memory model and the mutability matrix of pain - Jamie Allen
The java memory model and the mutability matrix of pain - Jamie AllenThe java memory model and the mutability matrix of pain - Jamie Allen
The java memory model and the mutability matrix of pain - Jamie Allen
 
The art of shifting perspectives - Rachel Davies
The art of shifting perspectives - Rachel DaviesThe art of shifting perspectives - Rachel Davies
The art of shifting perspectives - Rachel Davies
 
Spring Boot in the Web Tier - Dave Syer
Spring Boot in the Web Tier - Dave SyerSpring Boot in the Web Tier - Dave Syer
Spring Boot in the Web Tier - Dave Syer
 
Microservices from dream to reality in an hour - Dr. Holly Cummins
Microservices from dream to reality in an hour - Dr. Holly CumminsMicroservices from dream to reality in an hour - Dr. Holly Cummins
Microservices from dream to reality in an hour - Dr. Holly Cummins
 
Love your architecture - Alexander von Zitzewitz
Love your architecture - Alexander von ZitzewitzLove your architecture - Alexander von Zitzewitz
Love your architecture - Alexander von Zitzewitz
 
Lambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter LawreyLambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter Lawrey
 
Java generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
Java generics past, present and future - Raoul-Gabriel Urma, Richard WarburtonJava generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
Java generics past, present and future - Raoul-Gabriel Urma, Richard Warburton
 
Java 8 best practices - Stephen Colebourne
Java 8 best practices - Stephen ColebourneJava 8 best practices - Stephen Colebourne
Java 8 best practices - Stephen Colebourne
 
Intuitions for scaling data centric architectures - Benjamin Stopford
Intuitions for scaling data centric architectures - Benjamin StopfordIntuitions for scaling data centric architectures - Benjamin Stopford
Intuitions for scaling data centric architectures - Benjamin Stopford
 
Hybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
Hybrid solutions – combining in memory solutions with SSD - Christos ErotocritouHybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
Hybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
 
How to defeat feature gluttony - Kasia Mrowca
How to defeat feature gluttony - Kasia MrowcaHow to defeat feature gluttony - Kasia Mrowca
How to defeat feature gluttony - Kasia Mrowca
 

Recently uploaded

Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024
Sharepoint Designs
 
Strategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptxStrategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptx
varshanayak241
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Why React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdfWhy React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdf
ayushiqss
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
MayankTawar1
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
Peter Caitens
 

Recently uploaded (20)

Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024
 
Strategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptxStrategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptx
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Why React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdfWhy React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdf
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
 

Java vs. Java Script for enterprise web applications - Chris Bailey

  • 1. © 2015 IBM Corporation1 Java vs JavaScript For Enterprise Web Applications Chris Bailey IBM Runtime Technologies
  • 2. © 2015 IBM Corporation2 What Languages do you use? Java JavaScript Both 0 20 40 60 80 100 120 PercentageofAudience
  • 3. © 2015 IBM Corporation3 What Runtimes do you use? Server Java Applets JS in Browser Node.js Rhino Nashorn Avatar.js 0 20 40 60 80 100 120 PercentageofAudience
  • 4. © 2015 IBM Corporation4 4 Chris Bailey IBM Runtime Monitoring and Diagnostics Architect –14 years working with Java and JVM technologies –14 months working with Node.js and V8 Current Role(s): –IBM Java monitoring and diagnostics –Node Application Metrics project lead Node Foundation Member Benchmarking and Performance WGs JavaOne RockStar Author on performance and memory analysis baileyc@uk.ibm.com chrisbaileyibm cnbailey @seabaylea @Chris__Bailey
  • 5. © 2015 IBM Corporation5  Language Adoption  Deployment Modes  Code Development  Scalability  WebApplication Performance  Under the Hood  Enterprise Architectures Agenda
  • 6. © 2015 IBM Corporation6 6 Language Adoption
  • 7. © 2015 IBM Corporation7 GitHub Adoption: Java
  • 8. © 2015 IBM Corporation8 GitHub Adoption: JavaScript
  • 9. © 2015 IBM Corporation9 modulecounts.com
  • 10. © 2015 IBM Corporation10 StackOverflow User Survey
  • 11. © 2015 IBM Corporation11 Ratings based on the number of skilled engineers, courses and third party vendors. Tiobe Community Programming Index
  • 12. © 2015 IBM Corporation12 Indeed.com Job Trends: Java
  • 13. © 2015 IBM Corporation13 Indeed.com Job Trends: JavaScript
  • 14. © 2015 IBM Corporation14 Indeed.com Job Trends Java JavaScript
  • 15. © 2015 IBM Corporation15  JavaScript has a large developer base - #1 on GitHub with 45% more active repositories than Java - #1 on modulecounts.com with 29% more NPM modules than Maven - #1 used language by StackOverflow survey responders - #6 language on the Tiobe index  Java remains huge, particularly in the enterprise and on the server - #2 on GitHub with 52% more active repositories than the next language - #3 on modulecounts with 73.8% more modules than the next language - #2 language on the Tiobe index - #1 on indeed.com for developer jobs Language Adoption
  • 16. © 2015 IBM Corporation16 Deployment Modes
  • 17. © 2015 IBM Corporation17  JavaScript is ubiquitous in the browser - Supported in every browser - Integration with HTML and CSS  JavaScript is not affected by negative publicity.... Unless it is absolutely necessary to run Java in web browsers, disable it as described below, even after updating to 7u11. This will help mitigate other Java vulnerabilities that may be discovered in the future. This and previous Java vulnerabilities have been widely targeted by attackers, and new Java vulnerabilities are likely to be discovered. To defend against this and future Java vulnerabilities, consider disabling Java in web browsers… Usage in the browser
  • 18. © 2015 IBM Corporation18  Java has a long history on the server - JPE launched in 1998  Java has rich platform support: - Linux x86, Linux POWER, zLinux - Windows, Mac OS, Solaris, AIX, z/OS  JavaScript is a nascent language on the server - Limited platform support – although its growing - No API support to interact with the OS  Part of the browser security model - Frameworks like Node.js have changed that. Usage on the server
  • 19. © 2015 IBM Corporation19  Single Threaded Event based JavaScript framework – Uses non-blocking asynchronous I/O  Wraps the Chrome V8 JavaScript engine with I/O interfaces – Libuv provides interaction with OS/system  Designed to build scalable network applications – Suited for real time delivery of data to distributed client  Available on a wide set of platforms: - Linux on x86, ARM, Power and Z - Windows, Mac OS, Solaris, SmartOS and AIX libuvV8 Node Bindings Node Standard Library C JavaScript Server Side JavaScript: Node.js
  • 20. © 2015 IBM Corporation20 Anatomy of a Node.js application 1. package.json – Tracks properties, dependencies, version info, commands, etc. 2. JavaScript source files (i.e. app.js) •To install and execute: > npm install > node app.js 20
  • 21. © 2015 IBM Corporation21 Code Development
  • 22. © 2015 IBM Corporation22 var cluster = require('cluster'); var cpus = require('os').cpus().length; var http = require('http'); if (cluster.isMaster) { for (var i = 0; i < cpus; i++) { cluster.fork(); } cluster.on('death', function(worker) { console.log("Worker" + worker.pid + "died"); }); } else { http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World!n"); response.end(); }).listen(8080); } HTTP Server Example
  • 23. © 2015 IBM Corporation23 var cluster = require('cluster'); var cpus = require('os').cpus().length; var http = require('http'); if (cluster.isMaster) { for (var i = 0; i < cpus; i++) { cluster.fork(); } cluster.on('death', function(worker) { console.log("Worker" + worker.pid + "died"); }); } else { http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World!n"); response.end(); }).listen(8080); } Clustered HTTP Server Example
  • 24. © 2015 IBM Corporation24 Writing Node.js Code CodeVolumeRelativetoJava * based on benchmarksgame benchmarks Node.js Development Effort (lower is better) - 3x *or other transactional service
  • 25. © 2015 IBM Corporation25 Writing Node.js Code regex-dna Spectral-norm fannkuch-redux fasta k-nucleotide Binary-trees n-body Reverse-complement CodeVolumeRelativetoJava * based on benchmarksgame benchmarks Node.js Development Effort (lower is better) - 3x Avg 1/3rd less code *or other transactional service
  • 26. © 2015 IBM Corporation26 Writing Node.js Code regex-dna Spectral-norm fannkuch-redux fasta k-nucleotide Binary-trees n-body Reverse-complement CodeVolumeRelativetoJava * based on benchmarksgame benchmarks Node.js Development Effort (lower is better) - 3x ● Node.js has higher developer productivity Many applications developed with significantly less code ● Rich module system simplifies development Reduces need to develop custom code Avg 1/3rd less code *or other transactional service
  • 27. © 2015 IBM Corporation27 Scalability
  • 28. © 2015 IBM Corporation28  One thread (or process) per connection - Each thread waits on a response - Scalability determined by the number of threads  Each thread: - consumes memory - is relatively idle  Number of concurrent customers determined by number of depot workers  Additional customers wait in a queue with no response Typical approach to I/O
  • 29. © 2015 IBM Corporation29  One thread multiplexes for multiple requests - No waiting for a response - Handles return from I/O when notified  Scalability determined by: - CPU usage - “Back end” responsiveness  Number of concurrent customers determined by how fast the food Server can work  Or until the kitchen gets slammed Asycnhronous Non-Blocking I/O
  • 30. © 2015 IBM Corporation30  JavaScript is already event based in the browser - eg. onClick and onMouseOver events  First class functions and closures fit well with events - Easy to create and pass function callbacks - Easy to execute callbacks in the context of the event  Node.js execution is based on an event loop - Asynchronous I/O built in from the ground up  Node.js execution uses a single thread - No need to worry about locking or shared data - Most machines are now multi-CPU, so cluster capabilities are provided JavaScript and Asynchronous I/O
  • 31. © 2015 IBM Corporation31 var http = require('http'); var server = http.createServer(); server.listen(8080); server.on('request', function(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World!n"); response.end(); }); server.on('connection', function(socket) {}); server.on('close', function() {}); server.on('connect', function(socket) {}); server.on('upgrade', function(request, socket, head) {}); server.on('clientError', function(exception, socket) {}); Event based programming
  • 32. © 2015 IBM Corporation32 WebApp Performance
  • 33. © 2015 IBM Corporation33  JSON serialization of a newly instantiated object  Maps - Key of message - Value of Hello, World!  Example response: Results from TechEmpower.com Round 9 tests (2014-05-01) JSON Serialization
  • 34. © 2015 IBM Corporation34  JSON serialization of a newly instantiated object  Maps - Key of message - Value of Hello, World!  Example response: Results from TechEmpower.com Round 9 tests (2014-05-01) JSON Serialization JavaScript Java
  • 35. © 2015 IBM Corporation35 JavaScript WebApp Performance -100 -80 -60 -40 -20 0 20 40 -75 Node.js Performance (Compared to Java) JSON Serialization %ageofJavaPerformance
  • 36. © 2015 IBM Corporation36  Fetches single row from simple database table  Row serialized as JSON  Example response: Results from TechEmpower.com Round 9 tests (2014-05-01) Single Query
  • 37. © 2015 IBM Corporation37  Fetches single row from simple database table  Row serialized as JSON  Example response: Results from TechEmpower.com Round 9 tests (2014-05-01) Single Query JavaScript Java
  • 38. © 2015 IBM Corporation38 JavaScript WebApp Performance -100 -80 -60 -40 -20 0 20 40 -60.5 Node.js Performance (Compared to Java) JSON Serialization Single Query %ageofJavaPerformance
  • 39. © 2015 IBM Corporation39  Fetches multiple rows from a simple database table  Rows serialized as JSON  Example response: Results from TechEmpower.com Round 9 tests (2014-05-01) Multiple Queries
  • 40. © 2015 IBM Corporation40  Fetches multiple rows from a simple database table  Rows serialized as JSON  Example response: Results from TechEmpower.com Round 9 tests (2014-05-01) Multiple Queries JavaScript Java
  • 41. © 2015 IBM Corporation41 JavaScript WebApp Performance -100 -80 -60 -40 -20 0 20 40 -18 Node.js Performance (Compared to Java) JSON Serialization Single Query Multiple Queries %ageofJavaPerformance
  • 42. © 2015 IBM Corporation42  Fetches multiple rows from a simple database table  Converts rows to objects and modifies one attribute of each object  Updates each associated row and serializes as JSON  Example Response: Data Updates Results from TechEmpower.com Round 9 tests (2014-05-01)
  • 43. © 2015 IBM Corporation43  Fetches multiple rows from a simple database table  Converts rows to objects and modifies one attribute of each object  Updates each associated row and serializes as JSON  Example Response: Data Updates Results from TechEmpower.com Round 9 tests (2014-05-01) JavaScript Java
  • 44. © 2015 IBM Corporation44 JavaScript WebApp Performance -100 -80 -60 -40 -20 0 20 40 28 Node.js Performance (Compared to Java) JSON Serialization Single Query Multiple Queries Data Updates %ageofJavaPerformance
  • 45. © 2015 IBM Corporation45  Computation speed is (much) slower than Java  I/O speed is higher than Java JavaScript WebApp Performance -100 -80 -60 -40 -20 0 20 40 -75 -60.5 -18 28 Node.js Performance (Compared to Java) JSON Serialization Single Query Multiple Queries Data Updates %ageofJavaPerformance More Computation More I/O
  • 46. © 2015 IBM Corporation46 JavaScript on the JVM?
  • 47. © 2015 IBM Corporation47 Nashorn and Avatar.js  Nashorn JavaScript engine delivered in JDK8 – Utilizes new JVM level features for performance  Avatar.js provides Node.js support on Nashorn
  • 48. © 2015 IBM Corporation48 Nashorn and Avatar.js  Nashorn JavaScript engine delivered in JDK8 – Utilizes new JVM level features for performance  Avatar.js provides Node.js support on Nashorn  Results of “Octane” JavaScript benchmark*: – Node.js is 4.8x faster – Avatar.js is >10x larger * Using Java 8 pre-u20
  • 49. © 2015 IBM Corporation49 Nashorn and Avatar.js  Nashorn JavaScript engine delivered in JDK8 – Utilizes new JVM level features for performance  Avatar.js provides Node.js support on Nashorn  Results of “Octane” JavaScript benchmark*: – Node.js is 4.8x faster – Avatar.js is >10x larger * Using Java 8 pre-u40 Feb 12th , 2015: Avatar is “put on hold” https://blogs.oracle.com/theaquarium/entry/project_avatar_update
  • 50. © 2015 IBM Corporation50 JavaScript Performance Under the Hood
  • 51. © 2015 IBM Corporation51  Dynamic nature of JavaScript makes JIT optimizations more difficult – Any variable could be a function or data – Variables must be tested to determine how to handle handle them – Variables can change, so what worked previously many not apply in future  Example: the use of '+': • number + number → addition • string involved? → concatenation • objects involved? → convert to primitives then addition or concatenation • Functions involved? → ? JIT Compilation
  • 52. © 2015 IBM Corporation52 Execution flow for '+' operator int a int b int c = a + b Addition Return Result Java
  • 53. © 2015 IBM Corporation53 Execution flow for '+' operator int a int b int c = a + b Addition Return Result var a var b var c = a + b First Time? NO Use Previous Types Worked? Return Result YES Type of A? NO YES Type of B?String Concatenate String or Number Number Type of B? Number Addition UndefinedString Java JavaScript
  • 54. © 2015 IBM Corporation54  Dynamically typed languages are harder to manage under the hood  They subsequently have lower runtime performance for computational tasks  Highlighted in TechEmpower benchmarks: Dynamically vs Statically Types Languages -70 -60 -50 -40 -30 -20 -10 0 Dynamic vs Statically Typed Language Performance JSON Single Multi Updates Bestdynamiccomparedtobeststaticasbaseline
  • 55. © 2015 IBM Corporation55 Writing Node.js Code
  • 56. © 2015 IBM Corporation56 Not So Easy: JavaScript Syntax Fun > '5' – 3 2 // Weak typing, implicit conversion > '5' + 3 '53' // ...but not consistent > '5' – '4' 1 // String minus String = Integer?? > '5' + + '4' 54 // Multiple +'s are ok > 'Hello' + 'World' 'HelloWorld' // Ok, that's expected > 'Hello' + + 'World' 'HelloNaN' // ...but that isn't
  • 57. © 2015 IBM Corporation57 Not So Easy: JavaScript Syntax Fun > '5' – 3 2 // Weak typing, implicit conversion > '5' + 3 '53' // ...but not consistent > '5' – '4' 1 // String minus String = Integer?? > '5' + + '4' 54 // Multiple +'s are ok > 'Hello' + 'World' 'HelloWorld' // Ok, that's expected > 'Hello' + + 'World' 'HelloNaN' // ...but that isn't
  • 58. © 2015 IBM Corporation58 Not So Easy: JavaScript Syntax Fun > '5' – 3 2 // Weak typing, implicit conversion > '5' + 3 '53' // ...but not consistent > '5' – '4' 1 // String minus String = Integer?? > '5' + + '4' 54 // Multiple +'s are ok > 'Hello' + 'World' 'HelloWorld' // Ok, that's expected > 'Hello' + + 'World' 'HelloNaN' // ...but that isn't
  • 59. © 2015 IBM Corporation59 Not So Easy: JavaScript Syntax Fun > '5' – 3 2 // Weak typing, implicit conversion > '5' + 3 '53' // ...but not consistent > '5' – '4' 1 // String minus String = Integer?? > '5' + + '4' 54 // Multiple +'s are ok > 'Hello' + 'World' 'HelloWorld' // Ok, that's expected > 'Hello' + + 'World' 'HelloNaN' // ...but that isn't
  • 60. © 2015 IBM Corporation60 Not So Easy: JavaScript Syntax Fun > '5' – 3 2 // Weak typing, implicit conversion > '5' + 3 '53' // ...but not consistent > '5' – '4' 1 // String minus String = Integer?? > '5' + + '4' 54 // Multiple +'s are ok > 'Hello' + 'World' 'HelloWorld' // Ok, that's expected > 'Hello' + + 'World' 'HelloNaN' // ...but that isn't
  • 61. © 2015 IBM Corporation61 Not So Easy: JavaScript Syntax Fun > '5' – 3 2 // Weak typing, implicit conversion > '5' + 3 '53' // ...but not consistent > '5' – '4' 1 // String minus String = Integer?? > '5' + + '4' 54 // Multiple +'s are ok > 'Hello' + 'World' 'HelloWorld' // Ok, that's expected > 'Hello' + + 'World' 'HelloNaN' // ...but that isn't
  • 62. © 2015 IBM Corporation62 Not So Easy: JavaScript Syntax Fun > '5' – 3 2 // Weak typing, implicit conversion > '5' + 3 '53' // ...but not consistent > '5' – '4' 1 // String minus String = Integer?? > '5' + + '4' 54 // Multiple +'s are ok > 'Hello' + 'World' 'HelloWorld' // Ok, that's expected > 'Hello' + + 'World' 'HelloNaN' // ...but that isn't
  • 63. © 2015 IBM Corporation63 Not So Easy: JavaScript Syntax Fun > '5' – 3 2 // Weak typing, implicit conversion > '5' + 3 '53' // ...but not consistent > '5' – '4' 1 // String minus String = Integer?? > '5' + + '4' 54 // Multiple +'s are ok > 'Hello' + 'World' 'HelloWorld' // Ok, that's expected > 'Hello' + + 'World' 'HelloNaN' // ...but that isn't
  • 64. © 2015 IBM Corporation64 Not So Easy: JavaScript Syntax Fun > '5' – 3 2 // Weak typing, implicit conversion > '5' + 3 '53' // ...but not consistent > '5' – '4' 1 // String minus String = Integer?? > '5' + + '4' 54 // Multiple +'s are ok > 'Hello' + 'World' 'HelloWorld' // Ok, that's expected > 'Hello' + + 'World' 'HelloNaN' // ...but that isn't
  • 65. © 2015 IBM Corporation65 Not So Easy: JavaScript Syntax Fun > '5' – 3 2 // Weak typing, implicit conversion > '5' + 3 '53' // ...but not consistent > '5' – '4' 1 // String minus String = Integer?? > '5' + + '4' 54 // Multiple +'s are ok > 'Hello' + 'World' 'HelloWorld' // Ok, that's expected > 'Hello' + + 'World' 'HelloNaN' // ...but that isn't
  • 66. © 2015 IBM Corporation66 Not So Easy: JavaScript Syntax Fun > '5' – 3 2 // Weak typing, implicit conversion > '5' + 3 '53' // ...but not consistent > '5' – '4' 1 // String minus String = Integer?? > '5' + + '4' 54 // Multiple +'s are ok > 'Hello' + 'World' 'HelloWorld' // Ok, that's expected > 'Hello' + + 'World' 'HelloNaN' // ...but that isn't
  • 67. © 2015 IBM Corporation67 Not So Easy: JavaScript Syntax Fun > '5' – 3 2 // Weak typing, implicit conversion > '5' + 3 '53' // ...but not consistent > '5' – '4' 1 // String minus String = Integer?? > '5' + + '4' 54 // Multiple +'s are ok > 'Hello' + 'World' 'HelloWorld' // Ok, that's expected > 'Hello' + + 'World' 'HelloNaN' // ...but that isn't
  • 68. © 2015 IBM Corporation68 Not So Easy: JavaScript Syntax Fun > '5' + - '5' '5-2' // I can just about see that works > var x = 3 undefined > '5' – x + x 5 // Ok, that makes sense > var x = 3 undefined > '5' + x - x 50 // What???
  • 69. © 2015 IBM Corporation69 Not So Easy: JavaScript Syntax Fun > '5' + - '5' '5-5' // I can just about see that works > var x = 3 undefined > '5' – x + x 5 // Ok, that makes sense > var x = 3 undefined > '5' + x - x 50 // What???
  • 70. © 2015 IBM Corporation70 Not So Easy: JavaScript Syntax Fun > '5' + - '5' '5-2' // I can just about see that works > var x = 3 undefined > '5' – x + x 5 // Ok, that makes sense > var x = 3 undefined > '5' + x - x 50 // What???
  • 71. © 2015 IBM Corporation71 Not So Easy: JavaScript Syntax Fun > '5' + - '5' '5-2' // I can just about see that works > var x = 3 undefined > '5' – x + x 5 // Ok, that makes sense > var x = 3 undefined > '5' + x - x 50 // What???
  • 72. © 2015 IBM Corporation72 Not So Easy: JavaScript Syntax Fun > '5' + - '5' '5-2' // I can just about see that works > var x = 3 undefined > '5' – x + x 5 // Ok, that makes sense > var x = 3 undefined > '5' + x - x 50 // What???
  • 73. © 2015 IBM Corporation73 Not So Easy: JavaScript Syntax Fun > '5' + - '5' '5-2' // I can just about see that works > var x = 3 undefined > '5' – x + x 5 // Ok, that makes sense > var x = 3 undefined > '5' + x - x 50 // What???
  • 74. © 2015 IBM Corporation74 (Micro)Service Topologies
  • 75. © 2015 IBM Corporation75 Enterprise Application Platform – Web Applications Operations and Management Admin Analytics LoadBalancer LoadBalancer HTTP Monitoring ScalingAnalytics Diagnostics
  • 76. © 2015 IBM Corporation76 Questions
  • 77. © 2015 IBM Corporation77