Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F948404
PerfFun.html
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Subscribers
None
PerfFun.html
View Options
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<
html
>
<
head
>
<
title
>
Perf Tests
</
title
>
<
script
type
=
"text/javascript"
src
=
"../../../dojo/dojo.js"
djConfig
=
"isDebug:true"
></
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
;
buildAndRunSet
(
words
,
iters
);
},
0
);
});
});
function
element
(
tag
,
textOrChild
)
{
var
e
=
document
.
createElement
(
tag
);
if
(
dojo
.
isArray
(
textOrChild
))
dojo
.
forEach
(
textOrChild
,
function
(
c
)
{
e
.
appendChild
(
c
);
});
if
(
dojo
.
isString
(
textOrChild
))
e
.
appendChild
(
document
.
createTextNode
(
textOrChild
));
else
e
.
appendChild
(
textOrChild
);
return
e
;
}
function
log
(
t
)
{
dojo
.
byId
(
"mess"
).
innerHTML
=
t
;
}
function
reportRun
(
results
){
var
runs
=
results
.
runs
var
report
=
element
(
"dl"
,
element
(
"dt"
,
"Run with "
+
results
.
words
+
" words, "
+
results
.
iterations
+
" iterations and overhead of "
+
results
.
overhead
));
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
){
var
tests
=
set
.
tests
.
concat
();
//copy tests
var
resultSet
=
{};
resultSet
.
words
=
set
.
words
.
length
;
resultSet
.
overhead
=
runTest
(
function
(){},
iterations
);
resultSet
.
iterations
=
iterations
;
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
);
}
}
setTimeout
(
_run
,
0
);
}
function
buildTestSet
(
numWords
)
{
var
words
=
[],
i
,
wordsInLipsum
=
lipsum
.
length
;
for
(
i
=
numWords
;
i
>
0
;
i
-=
wordsInLipsum
)
{
if
(
i
>=
wordsInLipsum
)
{
words
=
words
.
concat
(
lipsum
);
}
else
{
words
=
words
.
concat
(
lipsum
.
slice
(
-
i
));
}
}
if
(
words
.
length
!=
numWords
)
throw
new
Error
(
"wrong number of words, got "
+
words
.
length
+
", expected "
+
numWords
);
var
expected
=
words
.
join
(
""
);
//console.log(words);
return
{
tests
:
[
{
name
:
"dojoForEach"
,
test
:
function
()
{
var
s
=
""
;
dojo
.
forEach
(
words
,
function
(
w
)
{
s
+=
w
;
});
return
s
;
}
},
{
name
:
"nativeForEach"
,
test
:
function
()
{
var
s
=
""
;
words
.
forEach
(
function
(
w
)
{
s
+=
w
;
});
return
s
;
}
},
{
name
:
"forLoop"
,
test
:
function
()
{
var
s
=
""
,
w
=
words
;
l
=
w
.
length
;
for
(
var
i
=
0
;
i
<
l
;
i
++
)
{
s
+=
w
[
i
];
}
return
s
;
}
},
{
name
:
"forLoopCallingInlineFunction"
,
test
:
function
()
{
var
s
=
""
,
w
=
words
;
l
=
w
.
length
;
function
fn
(
w
)
{
s
+=
w
;
};
for
(
var
i
=
0
;
i
<
l
;
i
++
)
{
fn
(
w
[
i
]);
}
return
s
;
}
},
{
name
:
"forLoopCallingExternalFunction"
,
test
:
function
()
{
g_s
=
""
,
w
=
words
;
l
=
w
.
length
;
for
(
var
i
=
0
;
i
<
l
;
i
++
)
{
externalAppend
(
w
[
i
]);
}
return
g_s
;
}
},
{
name
:
"forLoopWithInCheck"
,
test
:
function
()
{
var
s
=
""
,
w
=
words
;
l
=
w
.
length
;
for
(
var
i
=
0
;
i
<
l
;
i
++
)
{
if
(
i
in
w
)
s
+=
w
[
i
];
}
return
s
;
}
},
{
name
:
"emptyFor"
,
test
:
function
()
{
var
w
=
words
;
l
=
w
.
length
;
for
(
var
i
=
0
;
i
<
l
;
i
++
)
empty
(
w
[
i
]);
return
expected
;
}
},
{
name
:
"emptyForEach"
,
test
:
function
()
{
dojo
.
forEach
(
words
,
empty
);
return
expected
;
}
}
,
{
name
:
"identFor"
,
test
:
function
()
{
var
w
=
words
;
l
=
w
.
length
;
for
(
var
i
=
0
;
i
<
l
;
i
++
)
ident
(
w
[
i
]);
return
expected
;
}
},
{
name
:
"identForEach"
,
test
:
function
()
{
dojo
.
forEach
(
words
,
ident
);
return
expected
;
}
},
{
name
:
"addUsingFor"
,
test
:
function
()
{
var
x
=
0
;
for
(
var
i
=
0
;
i
<
1000
;
i
++
){
x
=
x
+
a
[
i
];}
return
expected
;
// fake
}
},
{
name
:
"addUsingForEach"
,
test
:
function
()
{
var
x
=
0
;
dojo
.
forEach
(
a
,
function
(
v
,
i
){
x
=
x
+
a
[
i
];});
return
expected
;
// fake
}
}
],
words
:
words
,
expected
:
expected
};
}
function
buildAndRunSet
(
words
,
times
)
{
runSet
(
buildTestSet
(
words
),
times
);
}
function
ident
(
w
)
{
return
w
;
}
function
empty
()
{
}
var
g_s
=
""
;
function
externalAppend
(
w
){
g_s
+=
w
;
}
var
a
=
new
Array
(
1000
);
for
(
var
i
=
0
;
i
<
1000
;
i
++
){
a
[
i
]
=
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
></
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
Sat, Apr 26, 16:21 (5 h, 33 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27585
Default Alt Text
PerfFun.html (7 KB)
Attached To
rZED Zed
Event Timeline
Log In to Comment