Rhino和 Nashorn是Java中運作Javascript兩種常見的方式,但是在許多方面并沒有滿足我們的要求:
1.既不支援”初始類型 ”。 所有與平台的互動都需要包裝成類,如Integer、Double或Boolean。
2.Nashorn不支援Android。
3.Rhino編譯器不支援Android系統優化。
4. 無論是哪個引擎都不支援在Android上遠端調試。
為了幫助解決這些問題,一個基于Java的新JavaScript運作項目: 谷歌的JavaScript引擎V8。 其運作庫包稱為J2V8是基于EPL的開源項目,Github項目位址,可以在MacOS Linux和Android上運作。
也就是說,Javascript可以在安卓系統上高效運作了。
不像其他JS運作時(包括JV8 Jav8), J2V8 采用基于原始的方法,導緻更少的垃圾。 下面的腳本生成一個數組,其中包含第一個100斐波納契數列。 這些資料可以直接通路,不需要包裝成對象。 執行這個腳本Rhino需要7.5秒的10000倍。 相同的腳本運作J2V8上10000次隻需要1秒。
var i;
var fib = []; //Initialize array!fib[0] = 1;
fib[1] = 1;
for(i=2; i<=100; i++)
{
fib[i] = fib[i-2] + fib[i-1];
}
fib;
用Java通路javascript數組:
V8Array array = v8.executeArrayScript(script);
double total = 0;
for (int i = 0; i < 100; i++) {
total += array.getDouble(i);
}
System.out.println(total);
array.release();
運作環境是是由V8通過其薄的JNI暴露部分API。 這種方法允許您不使用C / c++情況下将V8直接嵌入到Java應用程式。 J2v8目前目标V8版本3.26,
運作環境目前支援:V8Objects V8Arrays, 腳本調用以及從Java調用JS函數和注冊Java函數作為JS回調函數。 還有一個小型庫包可以将V8Objects和V8Arrays轉換為Java Map和List。
最後,運作時支援遠端調試,可以使用IDE工具,如Chrome Developer Tools for Eclipse。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CZmVGZhRzN3gzNzY2Y4UjYjJGN5Q2Y4ImZjRTY5QGM48CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
[該貼被banq于2014-11-26 13:01修改過]