Kudo / react-native-v8

Opt-in V8 runtime for React Native Android
MIT License
921 stars 69 forks source link

Performance: V8 JSI calls are 4-6 times slower than Hermes/JSC (iOS) #185

Open ammarahm-ed opened 1 year ago

ammarahm-ed commented 1 year ago

Hey Kudo, I have been doing some testing to check v8 JSI performance compared to Hermes/JSC and I have found out that it's 4-6 times slower than Hermes/JSC. The issue seems to be related to the V8 JSI implementation rather than a v8 issue.

All benchmarks below were run on the same iPhone 6S device.

React Native v8 JSI: v8

Pure v8 (v10.x) calls vs v8 JSI in a NativeScript app take only 200ms: rn_image_picker_lib_temp_e2f353e5-1964-4cef-8203-6f74b1690ed5

JSC JSI (Fastest of all): rn_image_picker_lib_temp_ee3d89fd-9329-4de1-926e-1931eb5c0f52

Hermes JSI:

 LOG  Running "ReactNative" with {"fabric":true,"initialProps":{"concurrentRoot":true},"rootTag":1}
 LOG  318.93000000715256 ms (Primitives)
 LOG  353.515625 ms (Strings)
 LOG  3873.240542009473 ms (Big data marshalling)
 LOG  272.34741701185703 ms (Strings with arraybuffer)
 LOG  890.5701670050621 ms (Big data marshalling with arr

Repro Expo Sample: https://github.com/ammarahm-ed/v8-jsi-benchmarks-ios

The issue might be related to: https://github.com/Kudo/react-native-v8/issues/179

Kudo commented 1 year ago

hi @ammarahm-ed, sorry for late response. besides #179 locking issue, people also reported performance regression from v8 11, so i had downgraded v8 to 10 for android. unfortunately, v8-ios doesn't support v8 10, i will try to upgrade to newer v8 to see if that helps.

ammarahm-ed commented 1 year ago

hi @ammarahm-ed, sorry for late response. besides #179 locking issue, people also reported performance regression from v8 11, so i had downgraded v8 to 10 for android. unfortunately, v8-ios doesn't support v8 10, i will try to upgrade to newer v8 to see if that helps.

After opening the issue here, I made some changes to the V8 jsi runtime that resulted in 3-4x performance improvement in function calls. Some of those might be overkill but I can open a PR if you want to take a look some time.

Kudo commented 1 year ago

After opening the issue here, I made some changes to the V8 jsi runtime that resulted in 3-4x performance improvement in function calls. Some of those might be overkill but I can open a PR if you want to take a look some time.

that's awesome, 3-4x improvement is much. appreciated if you could help to create a PR when you get a chance.

terrysahaidak commented 3 weeks ago

hey @ammarahm-ed could you share some more insights on what you did to improve JSI performance?

ammarahm-ed commented 3 weeks ago

hey @ammarahm-ed could you share some more insights on what you did to improve JSI performance?

I will see if I can find the changes I made to the runtime and share with you.