Skip to content

Commit 9c52daf

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 9c52daf

11 files changed

+109
-13
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

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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+
var suites = [];
12+
[
13+
DebounceCancel,
14+
LaterCancel,
15+
ScheduleCancel,
16+
ScheduleFlush,
17+
ThrottleCancel,
18+
].forEach(function (module) {
19+
if (Array.isArray(module)) {
20+
suites = suites.concat(module);
21+
} else {
22+
suites.push(module);
23+
}
24+
});
25+
26+
const searchParams = new URLSearchParams(window.location.search);
27+
const filter = searchParams.get("filter");
28+
29+
if (filter) {
30+
document.querySelector("input[name=filter]").value = filter;
31+
suites = suites.filter((s) =>
32+
s.name.toLowerCase().includes(filter.toLowerCase())
33+
);
34+
}
35+
36+
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",

0 commit comments

Comments
 (0)