-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSpeed.js
More file actions
122 lines (95 loc) · 2.79 KB
/
Speed.js
File metadata and controls
122 lines (95 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
(function(){
var required = {};
var loading = [];
var callbacks = [];
var ready = true;
var require = function(files, callback){
if (!files) return;
if (typeof files == 'string') files = [files];
var src;
while (src = files.shift()){
if (required[src]) continue;
required[src] = true;
loading.push(src);
}
if (ready) next();
push(callback);
};
var next = function(){
ready = !loading.length;
if (ready){
var callback;
while (callback = callbacks.shift()) callback();
} else {
load(loading.shift(), next);
}
};
var push = function(callback){
if (!callback) return;
if (ready) callback();
else callbacks.push(callback);
};
var load = function(src, callback){
var script = document.createElement('script');
script.type = 'text/javascript';
if (script.readyState) script.onreadystatechange = function(){
if (script.readyState == 'loaded' || script.readyState == 'complete'){
script.onreadystatechange = null;
if (callback) callback();
}
};
else script.onload = callback;
script.src = src;
head.appendChild(script);
};
var head = document.getElementsByTagName('head')[0];
var activity = document.getElementById('activity');
var playground = document.getElementById('playground');
var console = this.console;
if (!console || !console.time || !console.group || this.consoleCJSObject)
require('http://getfirebug.com/releases/lite/1.2/firebug-lite.js', function(){
firebug.init();
console = firebug.d.console.cmd;
console.group = console.info;
console.groupEnd = function(){};
});
var active = function(on){
activity.style.display = on ? 'block' : 'none';
};
active(false);
var run = function(name, test, iterations){
console.group(name);
iterations = test.iterations || iterations;
var setup = test.setup, teardown = test.teardown, before = test.before, after = test.after;
delete test.iterations; delete test.setup; delete test.teardown; delete test.before; delete test.after;
var box = playground; // reduce lookup time
var exec = function(fn){
if (fn) fn.call(test, box);
};
exec(setup);
for (var type in test){
var fn = test[type];
if (typeof fn != 'function' || type.charAt(0) == '_') continue;
exec(before);
console.time(type);
for (var i = iterations; i--; ) fn.call(test, box);
console.timeEnd(type);
exec(after);
}
exec(teardown);
box.innerHTML = '';
console.groupEnd(name);
};
this.Speed = function(tests){
active(true);
require(tests.require);
push(tests.setup);
var iterations = tests.iterations || 100;
delete tests.require; delete tests.setup; delete tests.iterations;
push(function(){
for (var name in tests) run(name, tests[name], iterations);
active(false);
});
};
Speed.require = require;
})();