add some perf specs
optimize listeners calling