By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,963 Members | 1,841 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,963 IT Pros & Developers. It's quick & easy.

small script --> huge load --> error message

P: n/a
Ok, I'm sure everybody who works with javascript has seen this
or similar messages depending on their agent:

A script on this page is causing mozilla to run slowly.
If it continues to run, your computer may become unresponsive.
Do you want to abort the script?
[ OK ] [Cancel]

besides the very confusing OK/Cancel buttons in FireFox, is there a
way to tell a javascript to give control back to the agent interface
for a few moments?

I am trying to list "all" the characters in tables (from #x0000-#xffff)
yeah, that's 65K characters...

the function is defined in the <head> section and goes:

<script type="text/javascript">

function createlist()
{
var hex="0123456789abcdef";
hex=hex.split("");
var fourth, third, second, first, spezial;
var oBody=document.getElementsByTagName("body").item(0 );
var oTable, oTHead, oTBody, oTFoot, oCaption;
var oRow, oCell, oHell, oDiv;

for (first=0;first<=15;first++)
{
for (second=0;second<=15;second++)
{
oTable = document.createElement("table");
oTHead = document.createElement("thead");
oTBody = document.createElement("tbody");
oTFoot = document.createElement("tfoot");
oCaption = document.createElement("caption");

oTable.appendChild(oCaption);
oTable.appendChild(oTHead);
oTable.appendChild(oTBody);
oTable.appendChild(oTFoot);
oTable.border=1;

oRow=document.createElement("tr");
oTHead.appendChild(oRow);
oCell = document.createElement("th");
oCell.appendChild(document.createTextNode("Hex"));
oRow.appendChild(oCell);
oBody.appendChild(oTable);
for (oHell=0;oHell<16;oHell++){
oCell = document.createElement("th");
oCell.appendChild(document.createTextNode(hex[oHell]));
oRow.appendChild(oCell);
}
oTBody = document.createElement("tbody");
oTable.appendChild(oTBody);

for (third=0;third<=15;third++)
{
oRow=document.createElement("tr");
oTBody.appendChild(oRow);
oCell=document.createElement("td");
oCell.appendChild(document.createTextNode("&#x"+he x[first]+hex[second]+"n"+hex[third]+";"));
oRow.appendChild(oCell);
for (fourth=0;fourth<=15;fourth++)
{
oCell=document.createElement("td");
oCell.innerHTML="&#x"+hex[first]+hex[second]+hex[fourth]+hex[third]+";";
oRow.appendChild(oCell);
}
}
}
}
}

</script>
and then in the body I call

<script type="text/javascript">
createlist();
</script>

plain and simple, well, except for the load it creates iterating through 16^4
characters creating 16^2 tables and 16^4+16^2 cells and 16^3+16^2 rows
(rough calculations off the top of my head ;-)

Is there a way to diffuse the load and still getting all the tables created?
Aug 30 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
Robi wrote:
Ok, I'm sure everybody who works with javascript has seen this
or similar messages depending on their agent:

A script on this page is causing mozilla to run slowly.
If it continues to run, your computer may become unresponsive.
Do you want to abort the script?
[ OK ] [Cancel]

besides the very confusing OK/Cancel buttons in FireFox, is there a
way to tell a javascript to give control back to the agent interface
for a few moments?
You may find this enlightening (and sympathetic too):

<URL:http://www.fourmilab.ch/fourmilog/archives/2005-08/000568.html>

The short answer is:

1. Type "about:config" in the address bar

2. Scroll down to "dom.max_script_run_time"

3. Double-click it and set it to however many seconds you'd like Firefox
to wait before presenting the confirm dialog.

I am trying to list "all" the characters in tables (from #x0000-#xffff)
yeah, that's 65K characters...

the function is defined in the <head> section and goes:

<script type="text/javascript">


Using DOM is commendable, but for this task I think you will find that
good 'ol non-standard 'DOM 0' document.write is hugely faster.

Excuse me for not testing it! I'll have a go and post back later...

[...]

--
Rob
Aug 30 '05 #2

P: n/a
RobG wrote:
Robi wrote:
Ok, I'm sure everybody who works with javascript has seen this
or similar messages depending on their agent:

A script on this page is causing mozilla to run slowly.
If it continues to run, your computer may become unresponsive.
Do you want to abort the script?
[ OK ] [Cancel]

besides the very confusing OK/Cancel buttons in FireFox, is there a
way to tell a javascript to give control back to the agent interface
for a few moments?

You may find this enlightening (and sympathetic too):

<URL:http://www.fourmilab.ch/fourmilog/archives/2005-08/000568.html>

The short answer is:

1. Type "about:config" in the address bar

2. Scroll down to "dom.max_script_run_time"

3. Double-click it and set it to however many seconds you'd like Firefox
to wait before presenting the confirm dialog.

I am trying to list "all" the characters in tables (from #x0000-#xffff)
yeah, that's 65K characters...

the function is defined in the <head> section and goes:

<script type="text/javascript">

Using DOM is commendable, but for this task I think you will find that
good 'ol non-standard 'DOM 0' document.write is hugely faster.

Excuse me for not testing it! I'll have a go and post back later...


Try this one:
- closing tags for tr & td omitted
- unused head, foot and caption elements omitted
- unneccessary (in this case) tbody omitted
function createlist() {
var hex="0123456789abcdef";
hex=hex.split("");
var n = hex.length;
var fourth, third, second, first, spezial;
var oBody = document.body;
var txt=[];

for ( first=0; first<n; first++ ) {
for (second=0;second<n;second++) {
txt.push('<table border="1"><tr><th>Hex<');

for ( oHell=0; oHell<n; oHell++){
txt.push('<th>' + hex[oHell]);
}

for ( third=0; third<n; third++) {
txt.push('<tr><td>' + '&#x' + hex[first]
+ hex[second] + 'n' + hex[third] + ';');

for ( fourth=0; fourth<n; fourth++) {
txt.push('<td>' + '&#x' + hex[first]
+ hex[second] + hex[fourth] + hex[third] + ';');
}
}
txt.push('</table>');
}
}
document.write(txt.join(''));
}
--
Rob
Aug 30 '05 #3

P: n/a
RobG wrote:
RobG wrote:
Robi wrote:
Ok, I'm sure everybody who works with javascript has seen this
or similar messages depending on their agent:

A script on this page is causing mozilla to run slowly.
If it continues to run, your computer may become unresponsive.
Do you want to abort the script?
[ OK ] [Cancel]

besides the very confusing OK/Cancel buttons in FireFox, is there a
way to tell a javascript to give control back to the agent interface
for a few moments?
You may find this enlightening (and sympathetic too):

<URL:http://www.fourmilab.ch/fourmilog/archives/2005-08/000568.html>

I did run across this page while trying to figure out what I could do,
but decided it to be a "hack" approach and try a different way because
if someone else wants to use the script (as perversely as it sounds)
that or those someones would need to adjust their agents and that wouldn't
necessarily have to be FF alone, and since I didn't find any "other"
obvious possibility I decided to post my question here.

[...] Using DOM is commendable, but for this task I think you will find that
good 'ol non-standard 'DOM 0' document.write is hugely faster.

Excuse me for not testing it! I'll have a go and post back later...


Try this one:
- closing tags for tr & td omitted
- unused head, foot and caption elements omitted
- unneccessary (in this case) tbody omitted


I understand the last two :-) but I didn't know tr/th/td end tags were optional until now
(probably until I or someone else change the document to xhtml...)

cool, thanks, now that's slim jim ;-)
function createlist() {
var hex="0123456789abcdef";
hex=hex.split("");
var n = hex.length;
var fourth, third, second, first, spezial;
var oBody = document.body;
var txt=[];

for ( first=0; first<n; first++ ) {
for (second=0;second<n;second++) {
txt.push('<table border="1"><tr><th>Hex<');

for ( oHell=0; oHell<n; oHell++){
txt.push('<th>' + hex[oHell]);
}

for ( third=0; third<n; third++) {
txt.push('<tr><td>' + '&#x' + hex[first]
+ hex[second] + 'n' + hex[third] + ';');

for ( fourth=0; fourth<n; fourth++) {
txt.push('<td>' + '&#x' + hex[first]
+ hex[second] + hex[fourth] + hex[third] + ';');
}
}
txt.push('</table>');
}
}
document.write(txt.join(''));
}


and the message didn't appear! :-D
oh, I tried to make "smaller" write() "blocks", moving the document.write()
into the "for(first" block, in the hope I would see the page grow, but all
I got was the message again, so I scraped that.
Thinking about it now, and after having read the fourmilab.ch article, it's
clearer to me, because wanting to run the script /and/ wanting to display
the data as it grows, uses all of FFs graphical/script resources.

Rob, thanks alot for the tip with the write('html')
instead of DOM createElement. Works great!

--
Robi
Aug 30 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.