Konferencija Javantura Zagreb 2014 by HUJAK
Java 8 JavaScript – Nashorn by Miroslav Rešetar
Java 8 donosi podršku za scripting u JavaScriptu. Engine se zove Nashorn (openjdk.java.net/projects/nashorn) i nasljednik je popularnog Rhino engine-a. Za razliku od starijeg Rhino-a, Nashorn koristi invoke dynamic Java 7 mehanizam što mu omogućava puno bolje performanse. Nashorn je moderni engine, usklađen sa ECMAScript 5.1 standardom. To omogućava uporabu popularnih JavaScript biblioteka iz Java programa što otvara neke sasvim nove načine kako implementiramo naša Java rješenja. Prezentacija ima za cilj upoznati Java developera s mogućnostima integracije JavaScript-a u buduća Java 8 rješenja.
2. JavaScript na Javanturi?
•
Alfresco
•
•
CMIS API implementiran u JavaScriptu
Neo4J
•
„people love to use Neo4j from Node.js and the browser”
•
Sencha Touch, Ext.Js, D3.js,
•
JavaFX
•
•
Dart
•
•
„writing JavaFX scripts in Nashorn is very easy”
transkompajlira se u JavaScript!
Vert.x
•
JavaScript API
4. JVM polyglot programming
• Clojure, Scala, JRuby, Jython, Rhino (JavaScript)
• Zašto JVM?
• Jer je zakon
• GC, Threads, Java API, ogromna količina biblioteka, puno
platformi
• JVM – najbolji dio Jave
5. Rhino
• Rhino – Java implementacija JavaScripta
• 1997 – Netscape započeo rad na Rhino-u
• 1998 – Rhino je predan Mozilli i open source-an
• 2006 – Java 6 pakira Rhino kao standardnu
implementaciju skriptnog jezika
6. Problemi sa Rhino-om
• Rhino je veoma spor u usporedbi sa ostalim JavaScript
engine-ima (browserima)
• Velika potrošnja memorije
• Veoma stari codebase (iz Java 1.1 vremena)
• Kako bi se „popravio” bio je potreban veliki rewrite,
odluka je bila krenuti iz početka
7. Nashorn
• Potpuno nova implementacija JavaScripta
• Kompajlirani kod a ne interpreter
• Dolazi standardno sa JDK-om 8
• 5 x manji footprint
• 20 x bolje performanse (otprilike )
10. InvokeDynamic
• A First Taste of InvokeDynamic
• „... static nature of Java is in the language itself (and not the
JVM)”
• „Every invocation has to be called against a known type.”
• „we must generate hundreds of tiny methods into tiny
classes with everything neatly tied up in a bow so the JVM
will pretty please perform that invocation for us as quickly
as possible”
•
„java.lang.OutOfMemoryError:
PermGen space”
• „InvokeDynamic ... the ability to make a dynamic call that
the JVM not only recognizes, but also optimizes in the same
way it optimizes plain old static-typed calls.”
•
MethodHandle happyTimeHandle = MethodHandles.findVirtual(Happy.class,
"happyTime", void.class, String.class);
13. QUnit
• „QUnit is a powerful, easy-to-use JavaScript unit testing
framework.”
• Dohvati engine, učitaj QUnit, setupiraj ga, pokreni test
14. {{Mustache}}
• „Mustache is a logic-less template syntax. It can be used for HTML,
config files, source code - anything. It works by expanding tags in a
template using values provided in a hash or object.”
16. Što Nashor nije
• Nije DOM/CSS okruženje
• Ne podržava korištenje biblioteka kao što su JQuery, Dojo,
Ext. (out-of-the-box)
• Nema browser plugin API
• Nije embeddable u browser
• Ne podržava ne standardizirane feature JavaScripta
• Nije multithreaded safe
• generalno nije problem ukoliko se izbjegava globalni scope
• loadWithNewGlobal creates a fresh global before loading
the script
18. Jim Laskey odgovara
• Postoji li debugger za Nashorn?
• Debuger je integriran u Netbeans 8 (beta).
• Eclipse još nema debugger za Nashorn.
• Da li radite još na poboljšanju performansi?
• Da. Veliki trud se ulaže kako bi performanse bile još bolje sa
verzijom 8u20. Verzija se očekuje na jesen. Za sada su brojke
obećavajuće.
• Što se događa sa Node.jar projektom?
• Preimenovan u Avatar.js. StrongLoop ulažu ogroman trud ne
bi li podržali projekt. Trenutne performanse su bolje od
Node.js. Bit će još bolje sa verzijom 8u20.
19. Project Avatar i Avatar.js
• „Avatar.js is a project to bring the node programming model,
APIs and module ecosystem to the Java platform.”
• „Avatar.js applications are both asynchronous and singlethreaded (exactly as in Node.js).”
• „Avatar - JavaScript services layer...rich client side framework
that assumes very minor JavaScript knowledge.”
20. Želite znati više?
• Jim Laskey - Nashorn, JavaScript for the JVM
• http://www.youtube.com/watch?v=I6eo2KPsk7U
• Attila Szegedi - The Curious Case of JavaScript on the JVM
(http://vimeo.com/78890890)
• Oracle Java Magazine Jan/Feb 2014 – Oracle Nashorn
• http://julien.ponge.org/blog/nashorn-article-in-oraclejavamagazine-jan-feb-2014/