Comments (13)
@axemclion Thanks very much
This is my demo project:
https://github.com/chufengma/HermesTestDemo
Time-consuming comparison between JSC and Hermes
run demo
Run with Hermes
// Run with Hermes
# gradle.properties
useHermesEngine=true
# shell
./gradlew installDebug
// Run with JSC
# gradle.properties
useHermesEngine=false
# shell
./gradlew installDebug
from hermes.
@axe-fb updated https://github.com/chufengma/HermesTestDemo today and remove some un-needed dependencies(I'm sorry it took so long to update -。-).
from hermes.
@chufengma , I ran the tests 20 times, with updated ReactMarker listeners. I did not find that Hermes is slower. Here are the results.
Could you also get similar data, with the markers (sent you a PR) to see if you have a similar issue ?
Marker | JSC | Hermes |
---|---|---|
REACT_CONTEXT_THREAD_START | 0 | 0 |
REACT_CONTEXT_THREAD_END | 1 | 1 |
VM_INIT | 1 | 1 |
VM_INIT | 1 | 1 |
LOAD_REACT_NATIVE_SO_FILE_START | 36 | 32 |
LOAD_REACT_NATIVE_SO_FILE_END | 36 | 34 |
CREATE_REACT_CONTEXT_START | 52 | 35 |
PROCESS_PACKAGES_START | 54 | 39 |
PROCESS_CORE_REACT_PACKAGE_START | 55 | 46 |
PROCESS_CORE_REACT_PACKAGE_END | 60 | 47 |
CREATE_MODULE_START | 67 | 47 |
CREATE_MODULE_END | 69 | 47 |
CREATE_MODULE_START | 69 | 47 |
CREATE_MODULE_END | 69 | 48 |
CREATE_MODULE_START | 69 | 49 |
CREATE_MODULE_END | 72 | 49 |
CREATE_MODULE_START | 72 | 49 |
CREATE_MODULE_END | 72 | 50 |
CREATE_MODULE_START | 72 | 50 |
CREATE_MODULE_END | 73 | 51 |
CREATE_MODULE_START | 73 | 51 |
CREATE_MODULE_END | 74 | 51 |
CREATE_MODULE_START | 74 | 51 |
CREATE_MODULE_END | 74 | 52 |
CREATE_MODULE_START | 74 | 52 |
CREATE_MODULE_END | 75 | 52 |
CREATE_MODULE_START | 75 | 52 |
CREATE_MODULE_END | 75 | 53 |
CREATE_MODULE_START | 75 | 53 |
CREATE_MODULE_END | 76 | 54 |
CREATE_MODULE_START | 76 | 54 |
CREATE_MODULE_END | 77 | 55 |
CREATE_MODULE_START | 77 | 55 |
CREATE_MODULE_END | 79 | 56 |
CREATE_MODULE_START | 79 | 56 |
CREATE_MODULE_END | 80 | 56 |
CREATE_MODULE_START | 80 | 56 |
CREATE_MODULE_END | 80 | 57 |
CREATE_MODULE_START | 80 | 57 |
CREATE_MODULE_END | 81 | 58 |
CREATE_MODULE_START | 81 | 58 |
CREATE_MODULE_END | 82 | 79 |
CREATE_MODULE_START | 82 | 79 |
CREATE_MODULE_END | 100 | 80 |
CREATE_MODULE_START | 100 | 80 |
CREATE_MODULE_END | 101 | 80 |
CREATE_MODULE_START | 101 | 80 |
CREATE_MODULE_END | 102 | 81 |
CREATE_MODULE_START | 102 | 81 |
CREATE_MODULE_END | 102 | 81 |
CREATE_MODULE_START | 102 | 81 |
CREATE_MODULE_END | 103 | 82 |
CREATE_MODULE_START | 103 | 82 |
CREATE_MODULE_END | 103 | 82 |
CREATE_MODULE_START | 103 | 82 |
CREATE_MODULE_END | 103 | 82 |
CREATE_MODULE_START | 103 | 82 |
CREATE_MODULE_END | 103 | 83 |
CREATE_MODULE_START | 103 | 83 |
CREATE_MODULE_END | 104 | 83 |
PROCESS_PACKAGES_END | 104 | 83 |
BUILD_NATIVE_MODULE_REGISTRY_START | 104 | 84 |
BUILD_NATIVE_MODULE_REGISTRY_END | 105 | 88 |
CREATE_CATALYST_INSTANCE_START | 105 | 88 |
CREATE_CATALYST_INSTANCE_END | 113 | 97 |
PRE_RUN_JS_BUNDLE_START | 114 | 99 |
RUN_JS_BUNDLE_START | 114 | 100 |
PRE_SETUP_REACT_CONTEXT_START | 115 | 100 |
PRE_SETUP_REACT_CONTEXT_END | 115 | 102 |
SETUP_REACT_CONTEXT_START | 115 | 102 |
ATTACH_MEASURED_ROOT_VIEWS_START | 116 | 103 |
ATTACH_MEASURED_ROOT_VIEWS_END | 116 | 103 |
SETUP_REACT_CONTEXT_END | 123 | 103 |
NATIVE_MODULE_INITIALIZE_START | 123 | 103 |
INITIALIZE_MODULE_START | 123 | 103 |
INITIALIZE_MODULE_END | 123 | 103 |
INITIALIZE_MODULE_START | 123 | 104 |
INITIALIZE_MODULE_END | 123 | 104 |
INITIALIZE_MODULE_START | 123 | 104 |
INITIALIZE_MODULE_END | 123 | 104 |
INITIALIZE_MODULE_START | 123 | 104 |
INITIALIZE_MODULE_END | 123 | 105 |
INITIALIZE_MODULE_START | 123 | 105 |
INITIALIZE_MODULE_END | 124 | 105 |
INITIALIZE_MODULE_START | 124 | 105 |
INITIALIZE_MODULE_END | 124 | 105 |
INITIALIZE_MODULE_START | 124 | 105 |
INITIALIZE_MODULE_END | 124 | 105 |
INITIALIZE_MODULE_START | 124 | 105 |
INITIALIZE_MODULE_END | 124 | 105 |
INITIALIZE_MODULE_START | 124 | 105 |
INITIALIZE_MODULE_END | 124 | 105 |
INITIALIZE_MODULE_START | 124 | 105 |
INITIALIZE_MODULE_END | 124 | 105 |
INITIALIZE_MODULE_START | 124 | 106 |
INITIALIZE_MODULE_END | 124 | 106 |
INITIALIZE_MODULE_START | 124 | 106 |
INITIALIZE_MODULE_END | 124 | 106 |
INITIALIZE_MODULE_START | 124 | 106 |
CREATE_MODULE_START | 124 | 106 |
CREATE_UI_MANAGER_MODULE_START | 124 | 106 |
CREATE_VIEW_MANAGERS_START | 126 | 106 |
CREATE_VIEW_MANAGERS_END | 161 | 106 |
CREATE_UI_MANAGER_MODULE_CONSTANTS_START | 163 | 106 |
NATIVE_MODULE_SETUP_START | 172 | 106 |
GET_CONSTANTS_START | 172 | 107 |
CREATE_MODULE_START | 172 | 107 |
INITIALIZE_MODULE_START | 172 | 109 |
INITIALIZE_MODULE_END | 172 | 112 |
CREATE_MODULE_END | 172 | 114 |
CONVERT_CONSTANTS_START | 187 | 114 |
CONVERT_CONSTANTS_END | 187 | 118 |
GET_CONSTANTS_END | 187 | 119 |
NATIVE_MODULE_SETUP_END | 190 | 119 |
NATIVE_MODULE_SETUP_START | 197 | 119 |
GET_CONSTANTS_START | 197 | 119 |
CREATE_MODULE_START | 197 | 119 |
INITIALIZE_MODULE_START | 199 | 119 |
INITIALIZE_MODULE_END | 199 | 119 |
CREATE_MODULE_END | 199 | 119 |
CONVERT_CONSTANTS_START | 200 | 119 |
CONVERT_CONSTANTS_END | 200 | 120 |
GET_CONSTANTS_END | 201 | 122 |
NATIVE_MODULE_SETUP_END | 202 | 122 |
NATIVE_MODULE_SETUP_START | 211 | 123 |
GET_CONSTANTS_START | 211 | 123 |
CONVERT_CONSTANTS_START | 217 | 124 |
CONVERT_CONSTANTS_END | 217 | 124 |
GET_CONSTANTS_END | 217 | 126 |
NATIVE_MODULE_SETUP_END | 218 | 126 |
NATIVE_MODULE_SETUP_START | 220 | 126 |
GET_CONSTANTS_START | 220 | 127 |
CONVERT_CONSTANTS_START | 220 | 127 |
CONVERT_CONSTANTS_END | 220 | 128 |
GET_CONSTANTS_END | 220 | 131 |
NATIVE_MODULE_SETUP_END | 223 | 131 |
NATIVE_MODULE_SETUP_START | 236 | 131 |
GET_CONSTANTS_START | 237 | 135 |
CREATE_MODULE_START | 237 | 135 |
CREATE_MODULE_END | 238 | 135 |
CONVERT_CONSTANTS_START | 239 | 135 |
CONVERT_CONSTANTS_END | 239 | 136 |
GET_CONSTANTS_END | 239 | 141 |
NATIVE_MODULE_SETUP_END | 240 | 141 |
NATIVE_MODULE_SETUP_START | 254 | 141 |
GET_CONSTANTS_START | 254 | 141 |
CONVERT_CONSTANTS_START | 255 | 141 |
CONVERT_CONSTANTS_END | 255 | 142 |
GET_CONSTANTS_END | 255 | 143 |
NATIVE_MODULE_SETUP_END | 256 | 143 |
NATIVE_MODULE_SETUP_START | 260 | 143 |
NATIVE_MODULE_SETUP_START | 260 | 143 |
GET_CONSTANTS_START | 260 | 143 |
CONVERT_CONSTANTS_START | 260 | 143 |
CONVERT_CONSTANTS_END | 261 | 144 |
GET_CONSTANTS_END | 261 | 144 |
NATIVE_MODULE_SETUP_END | 262 | 144 |
NATIVE_MODULE_SETUP_START | 262 | 150 |
GET_CONSTANTS_START | 263 | 151 |
CREATE_UI_MANAGER_MODULE_CONSTANTS_END | 288 | 236 |
CREATE_UI_MANAGER_MODULE_END | 295 | 246 |
INITIALIZE_MODULE_START | 295 | 246 |
INITIALIZE_MODULE_END | 296 | 247 |
CREATE_MODULE_END | 296 | 247 |
INITIALIZE_MODULE_END | 296 | 247 |
INITIALIZE_MODULE_START | 296 | 247 |
INITIALIZE_MODULE_END | 296 | 248 |
INITIALIZE_MODULE_START | 296 | 248 |
CONVERT_CONSTANTS_START | 296 | 248 |
INITIALIZE_MODULE_END | 297 | 248 |
INITIALIZE_MODULE_START | 297 | 248 |
INITIALIZE_MODULE_END | 297 | 248 |
INITIALIZE_MODULE_START | 297 | 248 |
ON_HOST_RESUME_START | 325 | 271 |
ON_HOST_RESUME_END | 329 | 274 |
INITIALIZE_MODULE_END | 336 | 284 |
INITIALIZE_MODULE_START | 336 | 285 |
INITIALIZE_MODULE_END | 337 | 285 |
INITIALIZE_MODULE_START | 337 | 285 |
INITIALIZE_MODULE_END | 337 | 285 |
INITIALIZE_MODULE_START | 337 | 285 |
INITIALIZE_MODULE_END | 337 | 285 |
INITIALIZE_MODULE_START | 337 | 285 |
INITIALIZE_MODULE_END | 337 | 285 |
INITIALIZE_MODULE_START | 338 | 285 |
INITIALIZE_MODULE_END | 338 | 286 |
INITIALIZE_MODULE_START | 338 | 286 |
INITIALIZE_MODULE_END | 338 | 286 |
INITIALIZE_MODULE_START | 338 | 286 |
INITIALIZE_MODULE_END | 338 | 286 |
INITIALIZE_MODULE_START | 338 | 286 |
INITIALIZE_MODULE_END | 338 | 286 |
INITIALIZE_MODULE_START | 338 | 286 |
INITIALIZE_MODULE_END | 338 | 287 |
NATIVE_MODULE_INITIALIZE_END | 338 | 287 |
CONVERT_CONSTANTS_END | 345 | 290 |
GET_CONSTANTS_END | 345 | 290 |
NATIVE_MODULE_SETUP_END | 361 | 302 |
CREATE_REACT_CONTEXT_END | 363 | 303 |
RUN_JS_BUNDLE_END | 363 | 304 |
CHANGE_THREAD_PRIORITY | 363 | 304 |
NATIVE_MODULE_SETUP_START | 379 | 307 |
GET_CONSTANTS_START | 379 | 307 |
CONVERT_CONSTANTS_START | 379 | 307 |
CONVERT_CONSTANTS_END | 379 | 307 |
GET_CONSTANTS_END | 380 | 308 |
NATIVE_MODULE_SETUP_END | 380 | 308 |
NATIVE_MODULE_SETUP_START | 383 | 312 |
NATIVE_MODULE_SETUP_START | 383 | 312 |
GET_CONSTANTS_START | 383 | 313 |
CONVERT_CONSTANTS_START | 384 | 313 |
CONVERT_CONSTANTS_END | 384 | 313 |
GET_CONSTANTS_END | 384 | 313 |
NATIVE_MODULE_SETUP_END | 384 | 314 |
NATIVE_MODULE_SETUP_START | 401 | 321 |
GET_CONSTANTS_START | 401 | 321 |
CONVERT_CONSTANTS_START | 402 | 321 |
CONVERT_CONSTANTS_END | 402 | 321 |
GET_CONSTANTS_END | 402 | 321 |
NATIVE_MODULE_SETUP_END | 402 | 322 |
CONTENT_APPEARED | 837 | 673 |
from hermes.
We would love to help. Is there a way you could create a test project that is similar to your app ? That will help us recreate and investigate this scenario better.
from hermes.
@chufengma - looks like there are some compile errors in the project - something around (ReactBuildConfig.DEBUG)
not found at a bunch of places. Could you please look at them ?
from hermes.
@axe-fb
Sorry, I added ReactBuildConfig to the .gitignore file. Please pull and try again.
from hermes.
I don't know gradle very well. Is installDebug giving you the debug Hermes build, or the release build? The latter will perform better.
from hermes.
@mhorowitz installRelease has the same problem.
from hermes.
@axe-fb any updates?
from hermes.
Hey, I am still having trouble running the demo project - this time the error is around couldn't find "libun7zip.so"
Can I request you to remove all un-needed dependencies, and have a smaller repro, so that it is easier for me to run this project ?
Also, could you add a ReactMarker.addListener
so that we can instrument all the other times that React Native takes ? This way, we will be able to separate React Native and Hermes concerns.
from hermes.
@chufengma - any update ? Wanted to take a look at this over the weekend.
from hermes.
@axemclion My problem is that when loading RN pages for the second time, Hermes is slower than JSC.
When I start my app, click the Load RN undle button, and through the ReactMaker I can see the data listed above. These data show that Hermes is faster than JSC without caching.
But when I press the return key to exit the RN page and click the Load RN bundle button again, this time using caching, Hermes is much slower than jsc, and at this time only the following logs can be seen through ReactMaker:
ON_HOST_RESUME_START null 0: 399215
ON_HOST_RESUME_END null 0: 399220
CONTENT_APPEARED CtripApp 41: 399977
from hermes.
After upgrading to 0.2.1, the problem is solved.
Thanks @axemclion
from hermes.
Related Issues (20)
- Catch JSErrors in C++ HOT 1
- babel-plugin-syntax-hermes-parser fails to parse decorators HOT 1
- Promise.allSettled undefined on iOS and Android using Hermes HOT 2
- How to get libjsi.so and header files from hermes aar HOT 1
- Missing default rejection tracking and console.log() polyfill to the Hermes CLI HOT 4
- top-level await not supported HOT 4
- error: no member named 'setfill' in namespace 'std' HOT 3
- toLocaleString date function returns the wrong date for "Asia/Singapore" timezone and 1981 and older years HOT 4
- Apollo Client is 4-10× slower with Hermes vs. JSC HOT 1
- Property checking in host objects HOT 3
- Date getTime unexpected result HOT 7
- [email protected] app build for Mac Catalyst fails with: `hermes.framework: bundle format is ambiguous (could be app or framework)` HOT 2
- Building static_h on x86_64 HOT 1
- TypedArrays are not spec-compliant and break Buffer with many ecosystem packages HOT 8
- Many libraries can cause "Error.stack getter called with an invalid receiver" HOT 16
- [Test] Please ignore HOT 1
- ERROR ReferenceError: Property 'currentInst' doesn't exist, js engine: hermes HOT 1
- Bug: hermes-eslint: no-unused-vars crashes in Flow libdefs with class declarations
- Documenting memory behaviours and leak detections HOT 2
- new Date('MMM DD, YYYY HH:MM PM') format is not supported HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hermes.