New approach
to render content
Nashorn
the hidden weapon of JDK 8
Nashorn
lightweight, high perf JavaScript runtime
successor of Rhino (4x faster, ES5.1)
seamless Java <-> JavaScript integration
JS > bytecode > JVM
Nashorn
performance comparison
Rhino 800ms
Nashorn 200ms
V8 100ms
Nashorn
// instantiate Nashorn engine
NashornScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
// load and evaluate JavaScript code
try {
engine.eval(read("path/to/some/javascript/code.js"));
} catch (ScriptException e) {
throw new RuntimeException(e);
}
// execute a function from the loaded JavaScript file
Object result = engine.invokeFunction("someFunction", someDataObject);
// do something with the retrieved result
doSomethingWith(result);
Spike
prove that
Nashorn + React.js
is a viable approach
?
Spike
✔ ran some JavaScript code through Nashorn
✔ rendered a React component using Nashorn
✔ injected results into Seller login page
(via FreeMarker template)
Spike
demo!
Mechanics
create, test a React component (browser)
load, compile in Nashorn (server)
feed it with the same data as FTLs
capture output, inject into page
serve page content
let React continue rendering (browser)
Advantages
universal JavaScript
server-side-first rendering
SEO (crawlers) and User friendly
fast, cacheable JVM bytecode
FE devs can take complete ownership
better separation between BE / FE
On the horizon
new features via the new approach
running unit test in all browsers + Nashorn
gradual migration of templates to React
full page rendering using Nashorn + React
switch to Node.js later
Universal Javascript with Nashorn
By Marton Hipszki
Universal Javascript with Nashorn
- 767