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/