Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Server-Side JavaScript with Nashorn


Published on

Slides from my talk, "Server-Side JavaScript with Nashorn" from MidwestJS

Published in: Internet
  • Be the first to comment

Server-Side JavaScript with Nashorn

  1. 1. Server-Side JavaScript with Nashorn Dan Woods @danveloper
  2. 2. About Me Author for InfoQ /danveloper
  3. 3. Intro My Experiences with PhotoZero! ! • A client-side file encryption service ! • Allowed clients to security unlock files/photos with confidence ! • Server never knew about the content or password that a user was uploading, only its chunks in the position ! • Salted unlock keys were encrypted to double-down on security
  4. 4. File Intro General PhotoZero Overview Chunks PZERO Chunking Engine Chunk Chunk Chunk Chunk Server Encryptor Encryptor Encryptor Encryptor DB Backgrounding:
  5. 5. Intro PhotoZero & How I came to Server-Side JavaScript! ! • Client entirely in HTML5 JavaScript ! • Decorated with JQuery (some good, mostly bad) ! • Server-side was implemented on the JVM (Grails) ! • Non-common language between front-end and back-end didn’t feel right
  6. 6. Intro Rhino! ! • Started by Netscape in 1997 ! • Originally designed as Netscape’s (ahem…) Javagator ! • Code generation, memory leaks, slow compilation times
  7. 7. Intro What is Nashorn?! ! • The Better-than-Rhino JVM JavaScript Engine ! • Comes out-of-the-box with Java 8 and above ! • Replacement for Rhino
  8. 8. Intro The Need for Nashorn! ! • JVM is a polyglot platform ! • Rhino is old ! • Comparatively, Rhino is quite slow ! • ECMAScript compliance
  9. 9. Intro The How of Nashorn! ! • Truly practical JavaScript on the JVM was not possible until Java 7 ! • Java 7’s invokeDynamic gives static linking to dynamic languages (incl. JavaScript) ! • JVM dynamic languages have runtime support in method dispatching, without runtime costs
  10. 10. Engine Features Nashorn Features! ! • 100% ECMAScript 5.1 compliance ! • Support for a few extensions • function expression closures - Mozilla 1.8, • for-each expressions - Mozilla 1.6, • Rhino constructor extensions ! • Powerful CLI (jjs) for building command-line scripts!
  11. 11. Use Cases Avatar.js and node.jar! ! • Avatar is a web framework that brings Node-style syntax and programming to the JVM ! • Written by Oracle as a code-gen’d bridge to HTML5 apps ! • Event-driven support for html web server, SSE spec, websockets
  12. 12. Use Cases Avatar.js and node.jar! ! • Respects your Node modules paths, so you can npm install in the same way ! • Note: v8 and Nashorn have different ideas about what the Error class does… I’ve built a “fix”
  13. 13. Use Cases Java Interoperability! ! • Java has a great modularity story, and its ability to compose libraries is a huge value to JavaScript ! • Java has a long history and has figured out solutions to a lot of the problems of server-side development ! • Nashorn’s dynamic linking brings performance with interoperability; JavaScript methods can be seamlessly linked and vice-versa
  14. 14. Use Cases What has Java Done Right?! ! • For better or worse: databases and persistence ! • Threads; we can’t just ignore these things! They’re useful! ! • Right Tool For The Job (tm) — JVM languages ! • Embedded systems ! • Build systems (Maven, Gradle, SBT, Ant, etc…)
  15. 15. Use Cases Why Should I Care?! ! • This platform of interop allows you to use best-of- breed for the job ! • Gives you an avenue to refactor existing code to more sensible JavaScript ! • Garner all the tooling and monitoring of JMX and Java instrumentation
  16. 16. Use Cases Server Side Scripting! ! • Nashorn ships with a script runner (jjs) ! • Allows server scripts to be written with JavaScript ! • Special syntax for falling back to shell, and ability to capture that output (very Perl-like)
  17. 17. Use Cases Performance! ! • Java 8 introduced practical JavaScript on the JVM ! • Performance & Compliance is at the forefront, but the former is still not quite there ! • The near-term roadmap for the JVM brings performance enhancements to Nashorn
  18. 18. Performance Performance! ! • Soon, JavaScript on the JVM will run at near-native performance levels! ! • This update will come as part of Java 8u40
  19. 19. The Future The Future…! ! • Nashorn will make the JVM a platform for performant dynamic languages, targeting native- like performance ! • Java 8 will continue to improve upon JavaScript’s server-side performance, and will offer other languages the same performance