Skip to content

Commit cbae379

Browse files
committed
Add support for running benchmarks in a browser
To view, run `yarn ember server` and then visit `localhost:4200/bench` in a browser. Running under `node` is still supported.
1 parent af77b18 commit cbae379

12 files changed

+103
-14
lines changed

README.md

+14
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,17 @@ The following code will only cause a single DOM manipulation:
7575
</body>
7676
</html>
7777
```
78+
79+
## Benchmarks
80+
81+
The `/bench` directory includes a number of performance benchmarks.
82+
83+
To run in `node`:
84+
85+
```bash
86+
yarn ember build
87+
node ./bench/index.js # (all benchmarks)
88+
node ./bench/index.js ./bench/benches/some-file.js # (specific benchmark)
89+
```
90+
91+
Or to run in a browser, run `yarn ember server`, and visit `http://localhost:4200` in a browser. Be aware that having the developer tools open/closed can affect JS performance.

bench/benches/debounce-cancel.js

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
var Backburner = require('../../dist/backburner').default;
2-
31
function sharedSetup() {
42
var backburner = new this.Backburner(["sync", "actions", "routerTransitions", "render", "afterRender", "destroy", "rsvpAfter"]);
53

bench/benches/later-cancel.js

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
var Backburner = require('../../dist/backburner').default;
2-
31
function sharedSetup() {
42
var backburner = new this.Backburner(["sync", "actions", "routerTransitions", "render", "afterRender", "destroy", "rsvpAfter"]);
53

bench/benches/schedule-cancel.js

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
var Backburner = require('../../dist/backburner').default;
2-
31
function sharedSetup() {
42
var backburner = new this.Backburner(["sync", "actions", "routerTransitions", "render", "afterRender", "destroy", "rsvpAfter"]);
53

bench/benches/schedule-flush.js

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
var Backburner = require('../../dist/backburner').default;
2-
31
function prodSetup() {
42
var backburner = new this.Backburner(["sync", "actions", "routerTransitions", "render", "afterRender", "destroy", "rsvpAfter"]);
53

bench/benches/throttle-cancel.js

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
var Backburner = require('../../dist/backburner').default;
2-
31
function sharedSetup() {
42
var backburner = new this.Backburner(["sync", "actions", "routerTransitions", "render", "afterRender", "destroy", "rsvpAfter"]);
53

bench/browser-bench.js

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import bench from "do-you-even-bench";
2+
import Benchmark from "benchmark";
3+
window.Benchmark = Benchmark;
4+
5+
import DebounceCancel from "./benches/debounce-cancel";
6+
import LaterCancel from "./benches/later-cancel";
7+
import ScheduleCancel from "./benches/schedule-cancel";
8+
import ScheduleFlush from "./benches/schedule-flush";
9+
import ThrottleCancel from "./benches/throttle-cancel";
10+
11+
let suites = [
12+
DebounceCancel,
13+
LaterCancel,
14+
ScheduleCancel,
15+
ScheduleFlush,
16+
ThrottleCancel,
17+
].flat();
18+
19+
const searchParams = new URLSearchParams(window.location.search);
20+
const filter = searchParams.get("filter");
21+
22+
if (filter) {
23+
document.querySelector("input[name=filter]").value = filter;
24+
suites = suites.filter((s) =>
25+
s.name.toLowerCase().includes(filter.toLowerCase())
26+
);
27+
}
28+
29+
bench(suites);

bench/index.html

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<title>Backburner.js Benchmarks</title>
6+
</head>
7+
<body>
8+
<form method="get">
9+
<label for="filter">Filter by benchmark name:</label>
10+
<input name="filter" type="text" />
11+
<button type="submit">Go</button>
12+
</form>
13+
<pre id="output">
14+
</pre>
15+
<script src="/ember-cli-live-reload.js" type="text/javascript"></script>
16+
<script src="../loader.js"></script>
17+
<script src="../named-amd/backburner.js"></script>
18+
<script src="lodash.js"></script>
19+
<script src="browser-bench.js"></script>
20+
<script>
21+
window.Backburner = require("backburner").default;
22+
require("browser-bench");
23+
</script>
24+
</body>
25+
</html>

bench/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ if (process.argv[2]) {
1515
console.log(fileGlob);
1616
}
1717

18+
globalThis.Backburner = require("../dist/backburner").default;
19+
1820
var suites = [];
1921
glob.sync(fileGlob).forEach(function(file) {
2022
var exported = require( path.resolve( file ) );

ember-cli-build.js

+31-3
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ module.exports = function (app) {
8989
files: ['qunit.css', 'qunit.js']
9090
}),
9191
new Funnel(path.dirname(require.resolve('loader.js')), {
92-
annotation: 'tests/loader.js',
93-
destDir: 'tests',
92+
annotation: 'loader.js',
93+
destDir: '',
9494
files: ['loader.js']
9595
}),
9696
new Funnel(compiled, {
@@ -108,7 +108,35 @@ module.exports = function (app) {
108108
new Funnel(__dirname + '/tests', {
109109
destDir: 'tests',
110110
files: ['index.html']
111-
})
111+
}),
112+
new Funnel(__dirname + "/bench", {
113+
destDir: "bench",
114+
files: ["index.html"],
115+
}),
116+
new Rollup(__dirname + "/bench", {
117+
rollup: {
118+
treeshake: false,
119+
input: "browser-bench.js",
120+
external: ["backburner"],
121+
plugins: [
122+
resolve(),
123+
commonjs(),
124+
loadWithInlineMap(),
125+
],
126+
output: [
127+
{
128+
file: "bench/browser-bench.js",
129+
format: "amd",
130+
amd: { id: "browser-bench" },
131+
sourcemap: true,
132+
},
133+
],
134+
},
135+
}),
136+
new Funnel(path.dirname(require.resolve("lodash")), {
137+
destDir: "bench",
138+
files: ["lodash.js"],
139+
}),
112140
], {
113141
annotation: 'dist'
114142
});

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"ember-cli-inject-live-reload": "2.0.2",
3434
"glob": "^7.1.6",
3535
"loader.js": "^4.7.0",
36+
"lodash": "^4.17.21",
3637
"lolex": "^6.0.0",
3738
"qunit": "^2.14.1",
3839
"release-it": "^14.2.1",

tests/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<script src="/ember-cli-live-reload.js" type="text/javascript"></script>
1313
<script src="qunit.js"></script>
1414
<script src="/testem.js"></script>
15-
<script src="loader.js"></script>
15+
<script src="/loader.js"></script>
1616
<script src="../named-amd/backburner.js"></script>
1717
<script src="../named-amd/tests.js"></script>
1818
<script>

0 commit comments

Comments
 (0)