javantura 2014 - java 8 javascript nashorn
TRANSCRIPT
![Page 1: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/1.jpg)
Java 8 JavaScript - Nashorn
@MiroslavResetar, Javantura, 22.2.2014.
![Page 2: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/2.jpg)
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 • „writing JavaFX scripts in Nashorn is very easy”
• Dart • transkompajlira se u JavaScript!
• Vert.x • JavaScript API
![Page 3: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/3.jpg)
Popularnost JavaScripta?
• Redmonk, siječanj 2014. • Github repozitoriji vs Stack Overflow
1. JavaScript (+1)
2. Java (-1)
3. PHP
4. C# (+2)
5. Python (-1)
![Page 4: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/4.jpg)
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
![Page 5: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/5.jpg)
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
![Page 6: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/6.jpg)
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
![Page 7: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/7.jpg)
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 )
![Page 8: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/8.jpg)
Rhino vs Nashorn
![Page 9: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/9.jpg)
Nashorn vs Groovy
![Page 10: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/10.jpg)
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);
![Page 11: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/11.jpg)
Kako do Nashorn-a?
• JSR 223 – javax.script (Java 6, 12/2006)
![Page 12: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/12.jpg)
Nashorn smoke test
![Page 13: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/13.jpg)
QUnit
• „QUnit is a powerful, easy-to-use JavaScript unit testing framework.”
• Dohvati engine, učitaj QUnit, setupiraj ga, pokreni test
![Page 14: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/14.jpg)
{{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.”
![Page 15: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/15.jpg)
Shell scripting: JJS
• Curl -> Regex -> Curl -> Play Audio
![Page 16: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/16.jpg)
Š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
![Page 17: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/17.jpg)
„Meet the team”
![Page 18: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/18.jpg)
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.
![Page 19: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/19.jpg)
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 single-threaded (exactly as in Node.js).”
• „Avatar - JavaScript services layer...rich client side framework that assumes very minor JavaScript knowledge.”
![Page 20: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/20.jpg)
Ž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-oracle-
javamagazine-jan-feb-2014/
![Page 21: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/21.jpg)
Pitanja?
![Page 22: Javantura 2014 - Java 8 JavaScript Nashorn](https://reader033.vdocuments.site/reader033/viewer/2022042602/55a231721a28ab25058b457a/html5/thumbnails/22.jpg)
Reference
• Kod - https://github.com/mresetar/javantura-nashorn
• JUnit benchmarks - http://labs.carrotsearch.com/junit-benchmarks-tutorial.html
• Nashorn JavaFx debugger - https://github.com/wickund/nashornexamples/
• Spring boot sample project
• Rhino QUnit setup
• VoiceRSS service