Skip to content
This repository was archived by the owner on Feb 26, 2024. It is now read-only.

Commit 3a017d3

Browse files
committed
perf: Add addEventListener benchmark
1 parent 8260f1d commit 3a017d3

1 file changed

Lines changed: 65 additions & 0 deletions

File tree

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<!doctype html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<title>Zone.js addEventListenerBenchmark</title>
6+
<link rel="stylesheet" href="css/style.css">
7+
<script src="../../dist/zone.js"></script>
8+
</head>
9+
<body>
10+
11+
<h1>addEventListener Benchmark</h1>
12+
13+
<h2>No Zone</h2>
14+
<button id="b1">Add/Remove same callback</button>
15+
<button id="b2">Add/Remove different callback</button>
16+
17+
<h2>With Zone</h2>
18+
<button id="b3">Add/Remove same callback</button>
19+
<button id="b4">Add/Remove different callback</button>
20+
21+
<div id="rootDiv"></div>
22+
23+
<script>
24+
b1.addEventListener('click', function () { addRemoveCallback(true, false); });
25+
b2.addEventListener('click', function () { addRemoveCallback(false, false); });
26+
b3.addEventListener('click', function () { addRemoveCallback(true, true); });
27+
b4.addEventListener('click', function () { addRemoveCallback(false, true); });
28+
var divs = [];
29+
var callbacks = [];
30+
var size = 100000;
31+
for(var i = 0; i < size; i++) {
32+
var div = document.createElement("div");
33+
var callback = (function(i) { return function() { console.log(i); }; })(i);
34+
rootDiv.appendChild(div);
35+
divs[i] = div;
36+
callbacks[i] = callback;
37+
}
38+
39+
function addRemoveCallback(reuse, useZone) {
40+
var start = performance.now();
41+
var callback = callbacks[0];
42+
for(var i = 0; i < size; i++) {
43+
var div = divs[i];
44+
if (!reuse) callback = callbacks[i];
45+
if (useZone)
46+
div.addEventListener('click', callback);
47+
else
48+
div.__zone_symbol__addEventListener('click', callback);
49+
}
50+
51+
for(var i = 0; i < size; i++) {
52+
var div = divs[i];
53+
if (!reuse) callback = callbacks[i];
54+
if (useZone)
55+
div.removeEventListener('click', callback);
56+
else
57+
div.__zone_symbol__removeEventListener('click', callback);
58+
}
59+
var end = performance.now();
60+
console.log(useZone ? 'use zone': 'native', reuse ? 'reuse' : 'new', end - start, 'ms');
61+
}
62+
63+
</script>
64+
</body>
65+
</html>

0 commit comments

Comments
 (0)