Nashorn Nedir?
•Java 8 için geliştirilen bir JS motorudur.
• JVM ortamında, Javascript dilini kullanmaya
olanak tanır.
• ECMAScript 5.1’i destekler.
3.
Nashorn Nedir?
•Dünyanın en popüler 2 dilini birlikte
kullanmaya olanak tanır.
• 2 dilin sahip olduğu geniş değer ırmağını
birleştirir. (Bilgi, tecrübe, framework, tools)
4.
Nashorn neyi hedefler?
• ECMAScript-262 sürüm 5.1’i desteklemeli.
– Uyumluluk testi sürecinde
• JSR 223 «javax.script» API’lerini desteklemeli.
• Java2JS ve JS2Java desteği olmalı.
• Bir shell aracı olmalı (JJS)
• Performans ve bellek tüketimi büyük ölçüde daha iyi
olmalı (Rhino’a göre)
5.
Nashorn neyi hedeflemez?
• Henüz ECMAScript 6 özelliklerini desteklemez.
• Standart olmayan özellikleri desteklemez.
• Nashorn bir browser ortamı değildir.
– DOM,CSS, Jquery, Dojo desteklemez.
6.
Neden Nashorn?
•Rhino diğer JS motorlarına göre düşük
performans sunuyordu.
• Nashorn bu amaçla sıfırdan yazıldı.
• Rhino JS motoruna göre, 5x performans
sunuyor.
JSR 223 "javax.script"paketi
• Java ortamından Script dillerine erişmek ve
kullanmak için özel bileşenler sunar.
9.
Java API –Evaluate Script
ScriptEngineManager em= new ScriptEngineManager();
ScriptEngine engine = em.getEngineByName("Nashorn");
engine.eval(" var a=5; var b=6; ");
engine.eval(" var c=7; print("Toplam:"+(a+b+c))");
10.
Java API –Object Binding
• Java ortamındanki nesnelerin, JS ortamına
eriştirilmesini sağlar.
ScriptEngine engine =
engineManager.getEngineByName("Nashorn");
engine.put("name","Emin");
engine.put("age" ,28);
11.
Java API –Compilable Arayüzü
• Derlenen bir Script’in tekrar tekrar kullanımına
olanak tanır.
Compilable compilable = (Compilable) engine;
CompiledScript compiled = compilable.compile("");
compiled.eval();
12.
Java API –Invocable Arayüzü
• Java tarafından, Script fonksiyonlarını
koşturmak için bulunan opsiyonel bir
arayüzdür.
Invocable inv = (Invocable) engine;
inv.invokeFunction("funcName",5,4);
inv.invokeMethod(context,"funcName",5,4);
13.
Java API –Harici Script
ScriptEngineManager em= new ScriptEngineManager();
ScriptEngine engine = em.getEngineByName("js");
engine.eval(new FileReader("..."));
Java Tiplerini Kullanmak
var IntArray = Java.type("int[]");
print(IntArray); // [JavaClass [I]
var intArray = new IntArray(3);
print(intArray); // [I@78b1cc93
intArray[0]=1;
intArray[1]=2;
intArray[2]=3;
17.
Java Tiplerini Kullanmak
var StrArray = Java.type("java.lang.String[]");
print(StrArray); // [JavaClass [Ljava.lang.String;]
var strArray = new StrArray(3);
print(strArray); // [Ljava.lang.String;@1da51a35
strArray[0]="Ali";
strArray[1]="Veli";
strArray[2]="Selami";
18.
Dizi Tip Dönüşümü(Java.to)
var jsArray = [];
jsArray[0] = "Ali";
jsArray.push(10);
print(jsArray); // Ali,10
var javaArray= Java.to(jsArray,"java.lang.String[]");
print(javaArray); // [Ljava.lang.String;@1786f9d5
print(javaArray[0]); // Ali
print(javaArray.length); // 2
19.
Dizi Tip Dönüşümü(Java.from)
var DoubleArray = Java.type("double[]");
var javaArray = new DoubleArray(3);
print(DoubleArray); // [JavaClass [D]
print(javaArray); // [D@a74868d
var jsArray = Java.from(javaArray);
jsArray.push(7.9);
print(jsArray); // 0,0,0,7.9
20.
Dizi Tip Dönüşümü(Java.from)
var List = java.util.LinkedList;
var liste = new List();
liste.add("Ali");
liste.add(5);
print(List); // [JavaClass java.util.LinkedList]
print(liste); // [Ali, 5]
var array = Java.from(liste);
array.push("Veli");
print(array); // Ali,5,Veli
21.
Java Paketlerinin Yüklenmesi
• Nashorn Java paket ve sınıflarının
yüklenmesine doğrudan destek vermez. Onun
yerine bir rhino modülünü kullanır.
load("nashorn:mozilla_compat.js");
importPackage("java.util");
importClass(java.util.Timer);
var list = new ArrayList();
Node’un avantajları
•Hafif
• Cross-platform
• Client ve Sunucuda aynı dil
• Npm (Node Package Manager)
• Asenkron G/Ç
– epool, kqueue, /dev/pool, select, IOCP
• Ölçeklenebilir
• Düşük bellek tüketimi
• C10K Problemine çözüm sunması
26.
Avatar.js avantajları
•Node uygulamalarını JVM’de koşturur.
• Java ve Javascript birlikte kullanılabilir.
– JDBC, Concurrency, Java EE
• MultiThreaded uygulamalar geliştirilebilir.
– Yüksek CPU kullanım deneyimi