Skip to content

Commit ae637cb

Browse files
committed
bechmark: add QuickJs (Script Mode) results
1 parent 9e09ee5 commit ae637cb

File tree

3 files changed

+37
-25
lines changed

3 files changed

+37
-25
lines changed

README.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,27 @@
77
1. Download the latest `.aar` archive from [release](https://github.com/shiqimei/quickjs-android/releases) page;
88
2. In Android Studio: `File > New > New Module > Import .JAR/.AAR Package`, locate `.aar`, click `Finish`.
99

10-
```Java
11-
QuickJS quickJS = new QuickJS.Builder().build();
12-
try (JSRuntime runtime = quickJS.createJSRuntime()) {
13-
try (JSContext context = runtime.createJSContext()) {
14-
String script1 = "" +
15-
"function fibonacci(n) {" +
16-
" if (n == 0 || n == 1) return n;" +
17-
" return fibonacci(n - 1) + fibonacci(n - 2);" +
18-
"}";
19-
// Evaluate a script without return value
20-
context.evaluate(script1, "fibonacci.js");
21-
22-
String script2 = "fibonacci(10);";
23-
// Evaluate a script with return value
24-
int result = context.evaluate(script2, "fibonacci.js", int.class);
25-
assertEquals(55, result);
26-
}
10+
```Java
11+
QuickJS quickJS = new QuickJS.Builder().build();
12+
try (JSRuntime runtime = quickJS.createJSRuntime()) {
13+
try (JSContext context = runtime.createJSContext()) {
14+
String script1 = "" +
15+
"function fibonacci(n) {" +
16+
" if (n == 0 || n == 1) return n;" +
17+
" return fibonacci(n - 1) + fibonacci(n - 2);" +
18+
"}";
19+
// Evaluate a script without return value
20+
context.evaluate(script1, "fibonacci.js");
21+
22+
String script2 = "fibonacci(10);";
23+
// Evaluate a script with return value
24+
int result = context.evaluate(script2, "fibonacci.js", int.class);
25+
assertEquals(55, result);
2726
}
28-
```
27+
}
28+
```
2929

30-
See [Usages.md](./Usages.md) for advanced usages.
30+
See [Usages.md](./Usages.md) for advanced usages.
3131

3232
## Develop
3333

@@ -41,11 +41,11 @@ Open the folder `quickjs-android` in Android Studio.
4141

4242
This is a non-serious benchmark. The purpose is to compare the performance of QuickJS and V8 on Android.
4343

44-
| Engine | v8 | QuickJS (Bytecode Mode) |
45-
| :----: | :--: | :---------------------: |
46-
| init | 30ms | 14ms |
47-
| eval | 29ms | 47ms |
48-
| total | 59ms | 61ms |
44+
| Engine | v8 | QuickJS (Script Mode) | QuickJS (Bytecode Mode) |
45+
| :----: | :--: | :-------------------: | :---------------------: |
46+
| init | 37ms | 18ms | 18ms |
47+
| eval | 35ms | 282ms | 48ms |
48+
| total | 72ms | 300ms | 56ms |
4949

5050
- Device: Huawei P30 Pro (Kirin 980), Android 10.
5151
- Test JavaScript File: `asset:/sonic.js` (189 KB).

app/src/main/java/com/shiqi/testquickjs/MainActivity.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import androidx.compose.runtime.Composable
1515
import androidx.compose.ui.Modifier
1616
import androidx.compose.ui.tooling.preview.Preview
1717
import com.shiqi.testquickjs.ui.theme.QuickJSTheme
18-
import kotlinx.coroutines.NonCancellable.start
1918

2019
class MainActivity : ComponentActivity() {
2120
companion object {
@@ -57,6 +56,12 @@ class MainActivity : ComponentActivity() {
5756

5857
val script = quickJSEngine.getScriptFromAsset("asset:/sonic.js")
5958

59+
val jsContext = quickJSEngine.createJsContext()
60+
val quickJsScriptStartTime = System.currentTimeMillis()
61+
jsContext.evaluate(script, "file.js")
62+
val quickJsScriptEndTime = System.currentTimeMillis()
63+
Log.i(TAG, "quickjs script cost: ${quickJsScriptEndTime - quickJsScriptStartTime}ms")
64+
6065
val bytes = quickJSEngine.getJsContext().compileJsToBytecode(script)
6166
val startTime = System.currentTimeMillis()
6267
quickJSEngine.getJsContext().evaluateBytecode(bytes)

app/src/main/java/com/shiqi/testquickjs/QuickJsEngine.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ class QuickJsEngine(private val context: Context) {
6767
}
6868
}
6969

70+
fun createJsContext(): JSContext {
71+
val quickJS = QuickJS.Builder().build()
72+
val jsRuntime = quickJS.createJSRuntime()
73+
jsRuntime.setMaxStackSize(0)
74+
return jsRuntime.createJSContext()
75+
}
76+
7077
fun getJsContext(): JSContext {
7178
return jsContext
7279
}

0 commit comments

Comments
 (0)