Skip to content

perf(core): use native addEventListener for faster rendering.#18107

Closed
mhevery wants to merge 1 commit intoangular:masterfrom
mhevery:direct_addEventListener
Closed

perf(core): use native addEventListener for faster rendering.#18107
mhevery wants to merge 1 commit intoangular:masterfrom
mhevery:direct_addEventListener

Conversation

@mhevery
Copy link
Copy Markdown
Contributor

@mhevery mhevery commented Jul 13, 2017

Angular can make many assumptions about its event handlers. As a result
the bookkeeping for native addEventListener is significantly cheaper
than Zone's addEventLister which can't make such assumptions.

This change bypasses the Zone's addEventListener if present and always
uses the native addEventHandler. As a result registering event listeners
is about 3 times faster.

@mhevery mhevery requested a review from IgorMinar July 13, 2017 22:37
Copy link
Copy Markdown
Contributor

@IgorMinar IgorMinar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not familiar with all the internals that might be affected by this change, but on the surface this looks right. We should however not merge this until after master is open for 5.0 changes due to the slight public api change.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this call into the native addEventListener? can you document that? it's not clear from this code what's going on here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added docs

@IgorMinar IgorMinar added action: cleanup The PR is in need of cleanup, either due to needing a rebase or in response to comments from reviews state: blocked labels Jul 14, 2017
Comment thread packages/core/src/zone/ng_zone.ts Outdated
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't the return type for runOutsideAngular be T (instead of any)?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch, fixed

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

than --> then

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

@mhevery mhevery force-pushed the direct_addEventListener branch 3 times, most recently from fa2ef62 to c64a586 Compare July 14, 2017 22:16
@mhevery mhevery removed action: cleanup The PR is in need of cleanup, either due to needing a rebase or in response to comments from reviews state: blocked labels Jul 17, 2017
@mhevery mhevery force-pushed the direct_addEventListener branch 2 times, most recently from 771dca7 to fcc7096 Compare July 17, 2017 17:56
@IgorMinar IgorMinar added the action: merge The PR is ready for merge by the caretaker label Jul 17, 2017
@alxhub alxhub added action: cleanup The PR is in need of cleanup, either due to needing a rebase or in response to comments from reviews and removed action: merge The PR is ready for merge by the caretaker labels Jul 18, 2017
@mhevery mhevery force-pushed the direct_addEventListener branch from fcc7096 to 3421dca Compare July 21, 2017 23:53
@pkozlowski-opensource
Copy link
Copy Markdown
Member

@mhevery I took your PR for a test drive and here are the results I'm seeing on a sample app I'm using for Angular perf testing

Before

    forcedGcAmount |       forcedGcTime |           gcAmount |             gcTime |        majorGcTime |     pureScriptTime |         renderTime |         scriptTime
------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------
           2676.10 |               8.41 |             872.74 |              11.67 |               0.02 |              71.60 |              91.39 |              71.60
           3705.25 |               8.55 |               0.00 |               0.00 |               0.00 |              56.81 |              35.62 |              56.81
           3708.75 |               9.11 |               0.00 |               0.00 |               0.00 |              55.84 |              36.73 |              55.84
           3708.82 |               8.78 |               0.00 |               0.00 |               0.00 |              51.68 |              37.19 |              51.68
           3684.94 |               8.76 |               0.00 |               0.00 |               0.00 |              49.14 |              37.37 |              49.14
           3673.35 |               8.53 |               0.00 |               0.00 |               0.00 |              46.35 |              39.38 |              46.35
           3679.52 |               9.02 |               0.00 |               0.00 |               0.00 |              41.30 |              35.53 |              41.30
           3679.25 |               9.30 |               0.00 |               0.00 |               0.00 |              45.88 |              39.32 |              45.88
           3670.77 |               8.85 |               0.00 |               0.00 |               0.00 |              43.36 |              39.14 |              43.36
           3676.83 |               9.41 |               0.00 |               0.00 |               0.00 |              48.45 |              37.52 |              48.45
           3689.84 |               8.69 |               0.00 |               0.00 |               0.00 |              41.51 |              35.74 |              41.51
           3671.09 |               9.96 |               0.00 |               0.00 |               0.00 |              42.25 |              40.35 |              42.25
           3672.90 |               8.95 |               0.00 |               0.00 |               0.00 |              39.64 |              36.83 |              39.64
           3671.46 |               9.22 |               0.00 |               0.00 |               0.00 |              40.46 |              37.68 |              40.46
           3671.88 |               9.86 |               0.00 |               0.00 |               0.00 |              47.25 |              35.60 |              47.25
           3755.75 |               9.31 |               0.00 |               0.00 |               0.00 |              42.86 |              37.03 |              42.86
           3683.50 |               8.75 |               0.00 |               0.00 |               0.00 |              42.47 |              36.47 |              42.47
           3679.86 |               8.78 |               0.00 |               0.00 |               0.00 |              43.96 |              35.75 |              43.96
           3674.36 |               9.70 |               0.00 |               0.00 |               0.00 |              43.65 |              37.52 |              43.65
           3704.49 |               8.99 |               0.00 |               0.00 |               0.00 |              48.58 |              37.95 |              48.58
           3698.16 |               9.06 |               0.00 |               0.00 |               0.00 |              37.38 |              38.54 |              37.38
           3698.74 |               8.95 |               0.00 |               0.00 |               0.00 |              36.66 |              36.14 |              36.66
           3670.64 |               8.85 |               0.00 |               0.00 |               0.00 |              38.47 |              36.94 |              38.47
           3668.05 |               9.74 |               0.00 |               0.00 |               0.00 |              40.27 |              36.95 |              40.27
           3671.99 |               8.97 |               0.00 |               0.00 |               0.00 |              42.87 |              37.48 |              42.87
           3699.13 |               9.03 |               0.00 |               0.00 |               0.00 |              37.77 |              38.46 |              37.77
           3676.77 |               9.46 |               0.00 |               0.00 |               0.00 |              41.97 |              38.68 |              41.97
           3667.91 |               8.71 |               0.00 |               0.00 |               0.00 |              39.03 |              37.99 |              39.03
           3670.27 |               9.44 |               0.00 |               0.00 |               0.00 |              38.46 |              35.69 |              38.46
           3683.33 |               9.19 |               0.00 |               0.00 |               0.00 |              45.79 |              39.78 |              45.79
           3670.22 |               8.94 |               0.00 |               0.00 |               0.00 |              41.23 |              36.73 |              41.23
           3671.99 |               9.39 |               0.00 |               0.00 |               0.00 |              37.10 |              34.74 |              37.10
           3689.15 |               9.08 |               0.00 |               0.00 |               0.00 |              41.51 |              36.92 |              41.51
           3671.80 |              10.12 |               0.00 |               0.00 |               0.00 |              40.93 |              37.88 |              40.93
           3691.26 |               9.07 |               0.00 |               0.00 |               0.00 |              45.13 |              37.45 |              45.13
           3671.79 |               9.32 |               0.00 |               0.00 |               0.00 |              38.22 |              37.63 |              38.22
           3682.98 |              10.37 |               0.00 |               0.00 |               0.00 |              39.54 |              38.35 |              39.54
           3671.85 |               9.56 |               0.00 |               0.00 |               0.00 |              37.81 |              36.16 |              37.81
           3670.47 |               8.75 |               0.00 |               0.00 |               0.00 |              36.87 |              37.66 |              36.87
           3672.69 |               9.03 |               0.00 |               0.00 |               0.00 |              40.56 |              37.57 |              40.56
================== | ================== | ================== | ================== | ================== | ================== | ================== | ==================
       3678.46+-0% |           9.25+-4% |               0.00 |               0.00 |               0.00 |          39.88+-6% |          37.39+-3% |          39.88+-6%

After

    forcedGcAmount |       forcedGcTime |           gcAmount |             gcTime |        majorGcTime |     pureScriptTime |         renderTime |         scriptTime
------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------
           2812.88 |               8.83 |             578.60 |               7.21 |               0.01 |              65.32 |              90.59 |              65.32
           3402.45 |               7.76 |               0.00 |               0.00 |               0.00 |              45.42 |              45.07 |              45.42
           3395.38 |               7.88 |               0.00 |               0.00 |               0.00 |              47.95 |              40.34 |              47.95
           3394.66 |               8.05 |               0.00 |               0.00 |               0.00 |              43.83 |              39.74 |              43.83
           3383.54 |               7.42 |               0.00 |               0.00 |               0.00 |              43.48 |              41.66 |              43.48
           3412.25 |               8.04 |               0.00 |               0.00 |               0.00 |              35.66 |              46.02 |              35.66
           3407.68 |               7.65 |               0.00 |               0.00 |               0.00 |              35.58 |              40.26 |              35.58
           3350.00 |               7.79 |               0.00 |               0.00 |               0.00 |              35.76 |              40.27 |              35.76
           3379.45 |               8.00 |               0.00 |               0.00 |               0.00 |              36.46 |              41.55 |              36.46
           3381.25 |               7.49 |               0.00 |               0.00 |               0.00 |              37.37 |              42.98 |              37.37
           3429.42 |               8.22 |               0.00 |               0.00 |               0.00 |              37.92 |              45.74 |              37.92
           3412.35 |               7.76 |               0.00 |               0.00 |               0.00 |              37.41 |              43.23 |              37.41
           3379.58 |               8.22 |               0.00 |               0.00 |               0.00 |              36.45 |              40.01 |              36.45
           3381.26 |               7.47 |               0.00 |               0.00 |               0.00 |              36.24 |              43.47 |              36.24
           3447.26 |               7.58 |               0.00 |               0.00 |               0.00 |              38.01 |              40.25 |              38.01
           3408.81 |               8.03 |               0.00 |               0.00 |               0.00 |              39.08 |              42.54 |              39.08
           3379.55 |               8.10 |               0.00 |               0.00 |               0.00 |              33.11 |              39.35 |              33.11
           3445.27 |               8.13 |               0.00 |               0.00 |               0.00 |              36.65 |              42.82 |              36.65
           3378.26 |               7.58 |               0.00 |               0.00 |               0.00 |              34.50 |              45.67 |              34.50
           3413.91 |               8.13 |               0.00 |               0.00 |               0.00 |              36.28 |              39.87 |              36.28
           3407.18 |               7.51 |               0.00 |               0.00 |               0.00 |              35.92 |              42.88 |              35.92
           3458.65 |              10.16 |               0.00 |               0.00 |               0.00 |              35.43 |              42.58 |              35.43
           3406.42 |               8.06 |               0.00 |               0.00 |               0.00 |              32.37 |              45.27 |              32.37
           3411.88 |               8.25 |               0.00 |               0.00 |               0.00 |              32.19 |              40.96 |              32.19
           3444.86 |               8.04 |               0.00 |               0.00 |               0.00 |              41.09 |              41.79 |              41.09
           3409.96 |               8.10 |               0.00 |               0.00 |               0.00 |              35.62 |              42.80 |              35.62
           3407.70 |               8.41 |               0.00 |               0.00 |               0.00 |              36.81 |              39.93 |              36.81
           3379.26 |               7.76 |               0.00 |               0.00 |               0.00 |              35.67 |              39.57 |              35.67
           3407.00 |               7.73 |               0.00 |               0.00 |               0.00 |              32.36 |              41.32 |              32.36
           3408.05 |               7.60 |               0.00 |               0.00 |               0.00 |              31.63 |              40.82 |              31.63
           3444.38 |               7.68 |               0.00 |               0.00 |               0.00 |              33.38 |              41.57 |              33.38
           3380.33 |               8.17 |               0.00 |               0.00 |               0.00 |              32.47 |              40.37 |              32.47
           3457.75 |               7.78 |               0.00 |               0.00 |               0.00 |              32.74 |              40.91 |              32.74
           3380.37 |               7.79 |               0.00 |               0.00 |               0.00 |              32.69 |              41.71 |              32.69
           3407.41 |               8.28 |               0.00 |               0.00 |               0.00 |              34.94 |              46.78 |              34.94
           3412.78 |               8.23 |               0.00 |               0.00 |               0.00 |              31.67 |              41.03 |              31.67
           3378.26 |               8.50 |               0.00 |               0.00 |               0.00 |              31.17 |              43.39 |              31.17
           3379.11 |               7.53 |               0.00 |               0.00 |               0.00 |              33.66 |              41.54 |              33.66
           3378.88 |               7.81 |               0.00 |               0.00 |               0.00 |              31.42 |              40.04 |              31.42
           3379.90 |               8.50 |               0.00 |               0.00 |               0.00 |              31.97 |              41.34 |              31.97
           3378.83 |               7.62 |               0.00 |               0.00 |               0.00 |              32.84 |              43.45 |              32.84
           3373.49 |               7.92 |               0.00 |               0.00 |               0.00 |              33.40 |              40.13 |              33.40
           3438.07 |               7.58 |               0.00 |               0.00 |               0.00 |              33.63 |              44.41 |              33.63
           3406.49 |               7.75 |               0.00 |               0.00 |               0.00 |              30.98 |              41.31 |              30.98
           3424.59 |               7.66 |               0.00 |               0.00 |               0.00 |              35.31 |              41.00 |              35.31
           3444.38 |               8.08 |               0.00 |               0.00 |               0.00 |              34.83 |              42.87 |              34.83
           3372.10 |               7.65 |               0.00 |               0.00 |               0.00 |              33.93 |              42.65 |              33.93
================== | ================== | ================== | ================== | ================== | ================== | ================== | ==================
       3401.57+-0% |           7.88+-3% |               0.00 |               0.00 |               0.00 |          33.03+-4% |          41.81+-3% |          33.03+-4%

Summary

  • pureScript time goes noticeably down, both before browser optimizes and after TurbFan did its magic (optimised version speedup is even more spectacular)
  • for reasons I'm having hard to explain the render time goes up

As always there is a bit of fluctuation from one test to another so to draw definitive conclusions we should run benchmarks in the "laboratory" conditions.

@mhevery mhevery added the action: merge The PR is ready for merge by the caretaker label Jul 24, 2017
@mhevery mhevery force-pushed the direct_addEventListener branch from 3421dca to 5e47f6e Compare July 24, 2017 22:52
Angular can make many assumptions about its event handlers. As a result
the bookkeeping for native addEventListener is significantly cheaper
than Zone's addEventLister which can't make such assumptions.

This change bypasses the Zone's addEventListener if present and always
uses the native addEventHandler. As a result registering event listeners
is about 3 times faster.
@mhevery mhevery force-pushed the direct_addEventListener branch from 5e47f6e to d14d401 Compare July 25, 2017 02:32
@mhevery mhevery closed this in 6279e50 Jul 25, 2017
asnowwolf pushed a commit to asnowwolf/angular that referenced this pull request Aug 11, 2017
…r#18107)

Angular can make many assumptions about its event handlers. As a result
the bookkeeping for native addEventListener is significantly cheaper
than Zone's addEventLister which can't make such assumptions.

This change bypasses the Zone's addEventListener if present and always
uses the native addEventHandler. As a result registering event listeners
is about 3 times faster.

PR Close angular#18107
juleskremer pushed a commit to juleskremer/angular that referenced this pull request Aug 26, 2017
…r#18107)

Angular can make many assumptions about its event handlers. As a result
the bookkeeping for native addEventListener is significantly cheaper
than Zone's addEventLister which can't make such assumptions.

This change bypasses the Zone's addEventListener if present and always
uses the native addEventHandler. As a result registering event listeners
is about 3 times faster.

PR Close angular#18107
juleskremer pushed a commit to juleskremer/angular that referenced this pull request Aug 28, 2017
…r#18107)

Angular can make many assumptions about its event handlers. As a result
the bookkeeping for native addEventListener is significantly cheaper
than Zone's addEventLister which can't make such assumptions.

This change bypasses the Zone's addEventListener if present and always
uses the native addEventHandler. As a result registering event listeners
is about 3 times faster.

PR Close angular#18107
@mhevery mhevery deleted the direct_addEventListener branch February 14, 2018 23:01
@angular-automatic-lock-bot
Copy link
Copy Markdown

This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.

Read more about our automatic conversation locking policy.

This action has been performed automatically by a bot.

@angular-automatic-lock-bot angular-automatic-lock-bot Bot locked and limited conversation to collaborators Sep 13, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

action: cleanup The PR is in need of cleanup, either due to needing a rebase or in response to comments from reviews action: merge The PR is ready for merge by the caretaker cla: yes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants