TNO
11-19-2005, 08:57 AM
I was testing the speed differences of a few loops and was surprised by the fact that Mozilla choked on them:
<html>
<head>
<script type="text/javascript">
var newwin;
function timer(){
newwin = window.open('timer.html','','toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=1,wid th=400,height=300,left = 312,top = 234');
if (!newwin.opener) newwin.opener = self;
}
var R = 1000
function _for() {
timer();
for( var i=0; i<R; i++ ) {
document.all.FOR.value+=i+" ~ Loop\n";
}
newwin.close();
}
function _forback() {
timer();
for( var i=R; i>0; i-- ) {
document.all.FOR.value+=i+" ~ Loop\n";
}
newwin.close();
}
function _forback2() {
timer();
for( var i=R; i--; ) {
document.all.FOR.value+=i+" ~ Loop\n";
}
newwin.close();
}
function _while() {
timer();
var i = R;
while( i-- ) {
document.all.FOR.value+=i+" ~ Loop\n";
}
newwin.close();
}
function _do() {
timer();
var i = 0;
do {
i++;
document.all.FOR.value+=i+" ~ Loop\n";
}
while( i<R );
newwin.close();
}
function _doback() {
timer();
var i = R;
do {
i--;
document.all.FOR.value+=i+" ~ Loop\n";
}
while( i>0 );
newwin.close();
}
function _doback2() {
timer();
var i = R - 1;
do {
document.all.FOR.value+=i+" ~ Loop\n";
}
while( i-- );
newwin.close();
}
function _doback3() {
timer();
var i = R;
if( i>0 ) {
do {
document.all.FOR.value+=i+" ~ Loop\n";
}
while( --i );
}
newwin.close();
}
function _duff4() {
timer();
var i = R % 4;
if( i>0 ) {
do {
document.all.FOR.value+=i+" ~ Loop\n";
}
while(--i);
}
i = parseInt( R / 4 );
if( i>0 ) {
do {
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
}
while(--i);
}
newwin.close();
}
function _duff8() {
timer();
var i = R % 8;
if( i>0 ) {
do {
document.all.FOR.value+=i+" ~ Loop\n";
}
while( --i );
}
i = parseInt( R / 8 );
if( i>0 ) {
do {
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
}
while( --i );
}
newwin.close();
}
</script>
</head>
<body>
<button onclick="document.all.FOR.value=''">Clear</button><br>
<textarea name="FOR" ID="FOR" value="" rows="15"></textarea>
<br>
<button onclick="_for()">For Loop</button> 11:93, 11:90, 11:87 AVG <b>11:90</b><br>
<button onclick="_forback()">ForBack Loop</button> 11:75, 11:93, 11:85 AVG <b>11:84</b><br>
<button onclick="_forback2()">ForBack2 Loop</button> 11:63, 11:85, 11:85 AVG <b>11:68</b><br>
<button onclick="_while()">While Loop</button> 11:76, 11:97, 11:63 AVG <b>11:79</b><br>
<button onclick="_do()">Do Loop</button> 11:66, 11:51, 11:61 AVG <b>11:59</b><br>
<button onclick="_doback()">DoBack Loop</button> 11:21, 11:89, 11:94 AVG <b>11:68</b><br>
<button onclick="_doback2()">DoBack2 Loop</button> 11:79, 11:91, 12:10 AVG <b>11:93</b><br>
<button onclick="_doback3()">DoBack3 Loop</button> 11:96, 12:37, 11:81 AVG <b>12:05</b><br>
<button onclick="_duff4()">Duff4 Loop</button> 11:30, 11:92, 11:93 AVG <b>11:72</b><br>
<button onclick="_duff8()">Duff8 Loop</button> 11:84, 12:11, 12:41 AVG <b>12:12</b><br>
</body>
</html>
Here's the code for the popup window:
<html>
<HEAD>
<script type="text/javascript">
var msec=0
var sec=0
var min=0
function start()
{
document.forms[0].display.value=min+":"+sec+":"+msec
go=setTimeout("start()",1)
msec++
if(msec==100)
{
msec=0
sec++
}
if(sec==60)
{
sec=0
min++
}
}
function stop()
{
alert(document.forms[0].display.value);
clearTimeout(go);
}
function reset()
{
window.location.reload()
}
</script>
</HEAD>
<BODY onload="start()" onunload="stop()">
<form>
<input type="text" name="display" size="22" value="00:00:00">
</form>
</body>
</html>
Is this a mozilla bug causing the crash or is it a code bug?
<html>
<head>
<script type="text/javascript">
var newwin;
function timer(){
newwin = window.open('timer.html','','toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=1,wid th=400,height=300,left = 312,top = 234');
if (!newwin.opener) newwin.opener = self;
}
var R = 1000
function _for() {
timer();
for( var i=0; i<R; i++ ) {
document.all.FOR.value+=i+" ~ Loop\n";
}
newwin.close();
}
function _forback() {
timer();
for( var i=R; i>0; i-- ) {
document.all.FOR.value+=i+" ~ Loop\n";
}
newwin.close();
}
function _forback2() {
timer();
for( var i=R; i--; ) {
document.all.FOR.value+=i+" ~ Loop\n";
}
newwin.close();
}
function _while() {
timer();
var i = R;
while( i-- ) {
document.all.FOR.value+=i+" ~ Loop\n";
}
newwin.close();
}
function _do() {
timer();
var i = 0;
do {
i++;
document.all.FOR.value+=i+" ~ Loop\n";
}
while( i<R );
newwin.close();
}
function _doback() {
timer();
var i = R;
do {
i--;
document.all.FOR.value+=i+" ~ Loop\n";
}
while( i>0 );
newwin.close();
}
function _doback2() {
timer();
var i = R - 1;
do {
document.all.FOR.value+=i+" ~ Loop\n";
}
while( i-- );
newwin.close();
}
function _doback3() {
timer();
var i = R;
if( i>0 ) {
do {
document.all.FOR.value+=i+" ~ Loop\n";
}
while( --i );
}
newwin.close();
}
function _duff4() {
timer();
var i = R % 4;
if( i>0 ) {
do {
document.all.FOR.value+=i+" ~ Loop\n";
}
while(--i);
}
i = parseInt( R / 4 );
if( i>0 ) {
do {
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
}
while(--i);
}
newwin.close();
}
function _duff8() {
timer();
var i = R % 8;
if( i>0 ) {
do {
document.all.FOR.value+=i+" ~ Loop\n";
}
while( --i );
}
i = parseInt( R / 8 );
if( i>0 ) {
do {
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
document.all.FOR.value+=i+" ~ Loop\n";
}
while( --i );
}
newwin.close();
}
</script>
</head>
<body>
<button onclick="document.all.FOR.value=''">Clear</button><br>
<textarea name="FOR" ID="FOR" value="" rows="15"></textarea>
<br>
<button onclick="_for()">For Loop</button> 11:93, 11:90, 11:87 AVG <b>11:90</b><br>
<button onclick="_forback()">ForBack Loop</button> 11:75, 11:93, 11:85 AVG <b>11:84</b><br>
<button onclick="_forback2()">ForBack2 Loop</button> 11:63, 11:85, 11:85 AVG <b>11:68</b><br>
<button onclick="_while()">While Loop</button> 11:76, 11:97, 11:63 AVG <b>11:79</b><br>
<button onclick="_do()">Do Loop</button> 11:66, 11:51, 11:61 AVG <b>11:59</b><br>
<button onclick="_doback()">DoBack Loop</button> 11:21, 11:89, 11:94 AVG <b>11:68</b><br>
<button onclick="_doback2()">DoBack2 Loop</button> 11:79, 11:91, 12:10 AVG <b>11:93</b><br>
<button onclick="_doback3()">DoBack3 Loop</button> 11:96, 12:37, 11:81 AVG <b>12:05</b><br>
<button onclick="_duff4()">Duff4 Loop</button> 11:30, 11:92, 11:93 AVG <b>11:72</b><br>
<button onclick="_duff8()">Duff8 Loop</button> 11:84, 12:11, 12:41 AVG <b>12:12</b><br>
</body>
</html>
Here's the code for the popup window:
<html>
<HEAD>
<script type="text/javascript">
var msec=0
var sec=0
var min=0
function start()
{
document.forms[0].display.value=min+":"+sec+":"+msec
go=setTimeout("start()",1)
msec++
if(msec==100)
{
msec=0
sec++
}
if(sec==60)
{
sec=0
min++
}
}
function stop()
{
alert(document.forms[0].display.value);
clearTimeout(go);
}
function reset()
{
window.location.reload()
}
</script>
</HEAD>
<BODY onload="start()" onunload="stop()">
<form>
<input type="text" name="display" size="22" value="00:00:00">
</form>
</body>
</html>
Is this a mozilla bug causing the crash or is it a code bug?