Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cache events and listeners objects where possible and loop over Object.keys() instead of using for..in. These changes alone give ~60-65% improvement in the ee-add-remove benchmark. The changes to EventEmitter.listenerCount() gives ~14% improvement and changes to emitter.listeners() gives significant improvements for <50 listeners (~195% improvement for 10 listeners). The changes to emitter.emit() gives 3x speedup for the fast cases with multiple handlers and a minor speedup for the slow case with multiple handlers. The swapping out of the util.is* type checking functions with inline checks gives another ~5-10% improvement. PR-URL: #601 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Evan Lucas <evanlucas@me.com>
- Loading branch information
b677b84
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
for...in is much faster for objects as plain as the events object. The Object.keys() method is only faster if you would otherwise need to rely on hasOwnProperty. See this jsPerf. I can back this up with a benchmark suite running in io.js 1.1.0.
Update: I just pulled the changes and compared the added use of Object.keys to an equivalent for...in and found no significant difference in performance as reported by the events benchmarks.
b677b84
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@tsbehlman See the discussion about that in the original PR here.