Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F881244
BuilderPerf.html
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
11 KB
Subscribers
None
BuilderPerf.html
View Options
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<
html
>
<
head
>
<
title
>
Builder Perf Tests
</
title
>
<
script
type
=
"text/javascript"
src
=
"../../../dojo/dojo.js"
></
script
>
<
script
type
=
"text/javascript"
src
=
"../Builder.js"
></
script
>
<
script
type
=
"text/javascript"
src
=
"lipsum.js"
></
script
>
<
script
type
=
"text/javascript"
>
dojo
.
addOnLoad
(
function
(){
dojo
.
byId
(
"run"
).
disabled
=
""
;
dojo
.
connect
(
dojo
.
byId
(
"run"
),
"onclick"
,
function
(
evt
)
{
setTimeout
(
function
()
{
var
words
=
parseInt
(
dojo
.
byId
(
"numWords"
).
value
)
||
10
;
var
iters
=
parseInt
(
dojo
.
byId
(
"numIters"
).
value
)
||
1000
;
var
dict
=
eval
(
dojo
.
byId
(
"dict"
).
value
);
buildAndRunSet
(
words
,
dict
,
iters
);
},
0
);
});
});
function
element
(
tag
,
textOrChildOrArray
)
{
var
e
=
document
.
createElement
(
tag
);
function
append
(
n
)
{
if
(
dojo
.
isString
(
n
)){
n
=
document
.
createTextNode
(
n
);
}
e
.
appendChild
(
n
);
}
if
(
dojo
.
isArray
(
textOrChildOrArray
))
{
dojo
.
forEach
(
textOrChildOrArray
,
append
);
}
else
{
append
(
textOrChildOrArray
);
}
return
e
;
}
function
log
(
t
)
{
dojo
.
byId
(
"mess"
).
innerHTML
=
t
;
console
.
log
(
t
);
}
function
reportRun
(
results
){
var
runs
=
results
.
runs
var
report
=
element
(
"dl"
,
element
(
"dt"
,
"Run with "
+
results
.
words
+
" words, "
+
results
.
iterations
+
" iterations, for loop overhead of "
+
results
.
overhead
+
", average phrase of "
+
results
.
wordSize
+
" characters"
));
runs
.
sort
(
function
(
a
,
b
)
{
return
a
.
time
-
b
.
time
;
});
dojo
.
forEach
(
runs
,
function
(
r
)
{
report
.
appendChild
(
element
(
"dd"
,
r
.
time
+
" - "
+
r
.
name
));
});
dojo
.
body
().
appendChild
(
report
);
}
function
runTest
(
test
,
iterations
,
expected
)
{
var
i
;
if
(
expected
!=
test
())
throw
new
Error
(
"Test failed expecting "
+
expected
+
", got "
+
test
());
var
start
=
new
Date
().
getTime
(),
end
;
for
(
i
=
0
;
i
<
iterations
;
i
++
){
test
();
}
end
=
new
Date
().
getTime
();
return
end
-
start
;
}
function
runSet
(
set
,
iterations
){
function
averagePhraseLen
(
words
)
{
var
sizes
=
dojo
.
map
(
words
,
function
(
w
)
{
return
w
.
length
;
});
var
total
=
0
;
dojo
.
forEach
(
sizes
,
function
(
s
)
{
total
+=
s
;
});
return
total
/
sizes
.
length
;
}
var
tests
=
set
.
tests
.
concat
();
//copy tests
var
resultSet
=
{};
resultSet
.
words
=
set
.
words
.
length
;
resultSet
.
overhead
=
runTest
(
set
.
overhead
,
iterations
);
resultSet
.
iterations
=
iterations
;
resultSet
.
wordSize
=
averagePhraseLen
(
set
.
words
);
var
runs
=
[];
function
_run
()
{
var
t
=
tests
.
pop
();
try
{
log
(
"Running "
+
t
.
name
);
if
(
t
)
runs
.
push
({
name
:
t
.
name
,
time
:
runTest
(
t
.
test
,
iterations
,
set
.
expected
)});
}
catch
(
e
)
{
console
.
error
(
"Error running "
+
t
.
name
);
console
.
error
(
e
);
}
if
(
tests
.
length
>
0
)
{
setTimeout
(
_run
,
0
);
}
else
{
log
(
"Done!"
);
resultSet
.
runs
=
runs
;
reportRun
(
resultSet
);
dojo
.
publish
(
"perf/run/done"
);
}
}
setTimeout
(
_run
,
25
);
}
function
buildTestSet
(
numWords
,
dict
)
{
var
words
=
[],
i
,
dl
=
dict
.
length
;
for
(
i
=
numWords
;
i
>
0
;
i
-=
dl
)
{
if
(
i
>=
dl
)
{
words
=
words
.
concat
(
dict
);
}
else
{
words
=
words
.
concat
(
dict
.
slice
(
-
i
));
}
}
if
(
words
.
length
!=
numWords
)
throw
new
Error
(
"wrong number of words, got "
+
words
.
length
+
", expected "
+
numWords
);
var
expected
=
words
.
join
(
""
);
var
_builder
=
new
dojox
.
string
.
Builder
();
return
{
tests
:
[
{
name
:
"concatFor"
,
test
:
function
()
{
var
s
=
""
;
for
(
var
i
=
0
;
i
<
words
.
length
;
i
++
)
{
s
=
s
.
concat
(
words
[
i
]);
}
return
s
;
}
},
/*
{
name: "concatForAlias",
test: function() {
var s = "", w = words, l = w.length;
for(var i = 0; i < l; i++) {
s = s.concat(w[i]);
}
return s;
}
},
{
name: "concatForEach",
test: function() {
var s = "";
dojo.forEach(words, function(w) {
s = s.concat(w);
});
return s;
}
},
*/
{
name
:
"concatOnce"
,
test
:
function
()
{
var
s
=
""
;
s
=
String
.
prototype
.
concat
.
apply
(
s
,
words
);
return
s
;
}
},
{
name
:
"builderFor"
,
test
:
function
()
{
var
b
=
new
dojox
.
string
.
Builder
();
for
(
var
i
=
0
;
i
<
words
.
length
;
i
++
)
{
b
.
append
(
words
[
i
]);
}
return
b
.
toString
();
}
},
/*
{
name: "builderForEach",
test: function() {
var b = new dojox.string.Builder();
dojo.forEach(words, function(w) {
b.append(w);
});
return b.toString();
}
},
*/
{
name
:
"builderReusedFor"
,
test
:
function
()
{
_builder
.
clear
();
for
(
var
i
=
0
;
i
<
words
.
length
;
i
++
)
{
_builder
.
append
(
words
[
i
]);
}
return
_builder
.
toString
();
}
},
{
name
:
"builderOnce"
,
test
:
function
()
{
var
b
=
new
dojox
.
string
.
Builder
();
b
.
appendArray
(
words
);
return
b
.
toString
();
}
},
{
name
:
"builderReusedOnce"
,
test
:
function
()
{
_builder
.
clear
();
_builder
.
appendArray
(
words
);
return
_builder
.
toString
();
}
},
{
name
:
"plusFor"
,
test
:
function
()
{
var
s
=
""
;
for
(
var
i
=
0
;
i
<
words
.
length
;
i
++
)
{
s
+=
words
[
i
];
}
return
s
;
}
},
/*
{
name: "plusForAlias",
test: function() {
var s = "", w = words, l = w.length;
for(var i = 0; i < l; i++) {
s += w[i];
}
return s;
}
},
{
name: "plusForEach",
test: function() {
var s = "";
dojo.forEach(words, function(w) { s += w; });
return s;
}
},*/
{
name
:
"joinOnce"
,
test
:
function
()
{
return
words
.
join
(
""
);
}
},
{
name
:
"joinFor"
,
test
:
function
()
{
var
a
=
[];
for
(
var
i
=
0
;
i
<
words
.
length
;
i
++
)
{
a
.
push
(
words
[
i
]);
}
return
a
.
join
(
""
);
}
}
/*,
{
name: "joinForAlias",
test: function() {
var a = [], w = words, l = w.length;
for(var i = 0; i <l; i++) {
a.push(w[i]);
}
return a.join("");
}
},
{
name: "joinForEach",
test: function() {
var a = [];
dojo.forEach(words, function(w) { a.push(w); });
return a.join("");
}
}
*/
],
words
:
words
,
expected
:
expected
,
overhead
:
function
()
{
var
w
=
words
;
var
l
=
w
.
length
;
for
(
var
i
=
0
;
i
<
l
;
i
++
)
{
ident
(
w
[
i
]);
}
}
};
}
function
buildAndRunSet
(
words
,
dict
,
times
)
{
runSet
(
buildTestSet
(
words
,
dict
),
times
);
}
function
runSuite
()
{
var
suite
=
[
{
words
:
2
,
times
:
10000
},
{
words
:
4
,
times
:
10000
},
{
words
:
8
,
times
:
10000
},
{
words
:
16
,
times
:
10000
},
{
words
:
32
,
times
:
10000
},
{
words
:
64
,
times
:
10000
},
{
words
:
128
,
times
:
1000
},
{
words
:
256
,
times
:
1000
},
{
words
:
512
,
times
:
1000
},
{
words
:
1024
,
times
:
1000
},
{
words
:
2048
,
times
:
1000
},
{
words
:
4096
,
times
:
100
},
{
words
:
8192
,
times
:
100
}
];
var
totalSuite
=
dojo
.
map
(
suite
,
function
(
s
)
{
var
n
=
{};
dojo
.
mixin
(
n
,
s
);
n
.
dict
=
lipsum
;
return
n
;
});
totalSuite
=
totalSuite
.
concat
(
dojo
.
map
(
suite
,
function
(
s
)
{
var
n
=
{};
dojo
.
mixin
(
n
,
s
);
n
.
dict
=
lipsumLong
;
return
n
;
}));
console
.
log
(
totalSuite
);
var
handle
=
dojo
.
subscribe
(
"perf/run/done"
,
_run
);
dojo
.
subscribe
(
"perf/run/done"
,
function
(){
console
.
log
(
"perf run done"
);
});
function
_run
()
{
var
t
=
totalSuite
.
shift
();
if
(
t
)
buildAndRunSet
(
t
.
words
,
t
.
dict
,
t
.
times
);
if
(
totalSuite
.
length
==
0
)
dojo
.
unsubscribe
(
handle
);
}
_run
();
}
function
ident
(
i
)
{
return
i
;
}
</
script
>
<
style
type
=
"text/css"
>
html
{
font-family
:
Lucida
Grande
,
Tahoma
;
}
div
{
margin-bottom
:
1
em
;
}
#
results
{
border
:
1
px
solid
#999
;
border-collapse
:
collapse
;
}
#
results
caption
{
font-size
:
medium
;
font-weight
:
bold
;
}
#
results
td
,
#
results
th
{
text-align
:
right
;
width
:
10
em
;
font-size
:
small
;
white-space
:
nowrap
;
}
#
wordsCol
{
background
:
yellow
;
}
td
.
max
{
color
:
red
;
font-weight
:
bold
;
}
td
.
min
{
color
:
green
;
font-weight
:
bold
;
}
</
style
>
</
head
>
<
body
>
<
table
>
<
tr
><
td
><
label
for
=
"numWords"
>
Words
</
label
></
td
><
td
><
input
type
=
"text"
id
=
"numWords"
value
=
"100"
/></
td
></
tr
>
<
tr
><
td
><
label
for
=
"numIters"
>
Iterations
</
label
></
td
><
td
><
input
type
=
"text"
id
=
"numIters"
value
=
"1000"
/></
td
></
tr
>
<
tr
><
td
><
label
for
=
"dict"
>
Dictionary
</
label
></
td
><
td
><
input
type
=
"text"
id
=
"dict"
value
=
"lipsum"
></
td
></
tr
>
<
tr
><
td
></
td
><
td
><
button
id
=
"run"
disabled
>
Run Tests!
</
button
></
td
></
tr
>
</
table
>
<
div
id
=
"mess"
></
div
>
</
body
>
</
html
>
File Metadata
Details
Attached
Mime Type
text/html
Expires
Apr 2 2025, 05:34 (4 w, 2 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27442
Default Alt Text
BuilderPerf.html (11 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment