Sascha: Javascript Menü zu langsam :-(

hi zusammen,

hab mir auch ein Javamenü aus dem internet geholt (von http://skripte.rabich.de/skripte/anwendungen/menue.html) leider ist es für einen 56Kmodem Benutzer total langsam..,.... kann ich da etwas an der Geschwindigkeit ändern ?

http://www.draischiibe.de

für Hilfe wäre ich dankbar.

Grüsse sascha

quellcode:

/*

================ Anwendung: Menue

Copyright (c) 2000 by DS. Alle Rechte vorbehalten.

Version:     2.3.1b Datum:       23.9.1999

Aenderungen: 23.2.2000 Optimierungen              15.3.2000 oeffne_menue_pfad() implementiert

Das Dokument enthaelt alle zentral zur Verfuegung stehenden Funktionen.

*/

// === Variablen (global) ===

var eintraege  = new Array() var bildname  = "Bild"

// === Parameter (Vorbelegung) ===

var body_bgcolor  = "FF0000" var body_background  = "" var body_text  = "FFFFFF" var body_link  = "FFFFFF" var body_alink  = "FFFFFF" var body_vlink  = "FFFFFF" var body_hover  = "CCCCFF" var a_underline  = false var menue_pre  = "<B><SMALL>" var menue_post  = "</SMALL></B>" var eintrag_pre  = "<EM><SMALL>" var eintrag_post  = "</SMALL></EM>" var menue_titel  = "<TABLE WIDTH="100%" CELLPADDING="2" CELLSPACING="0" BORDER="0" BGCOLOR="#CCCCFF">" +      "<TR ALIGN="CENTER">" +      "<TD><B><FONT COLOR="#FFFFFF">Menü</FONT></B></TD>" +      "</TR>" +      "</TABLE>" var menue_style  = "font-family: Verdana, Arial, sans-serif;" var rand   = 0 var bild_eintrag  = "normal.gif" var bild_menue_offen = "offen.gif" var bild_menue_geschlossen = "geschlossen.gif" var bild_breite  = 12 var bild_hoehe  = 12 var frame_name  = "menuetree" var extra   = true var extra_text_expand = "Aufbauen" var extra_text_collapse = "Abbauen" var extra_pre  = "<SMALL>" var extra_post  = "</SMALL>" var exclusive  = false var copyright  = true

// === Hilfsfunktionen ===

// Cookie lesen function read_cookie(cookie_name) {  var cookie_string = document.cookie  var cookie_array = cookie_string.split(";")  var array_size  = cookie_array.length  var cookie_teile

var i = 0

for(i = 0; i < array_size; i++)  {   cookie_teile = cookie_array[i].split("=")   if(cookie_teile[0].substring(0, 1) == " ")    cookie_teile[0] = cookie_teile[0].substring(1, cookie_teile[0].length)   if(cookie_teile[0] == cookie_name)    return unescape(cookie_teile[1])  }

return "" }

// Cookie schreiben function write_cookie(cookie_name, cookie_wert, gueltigkeitszeitraum) {  if(gueltigkeitszeitraum)  {   var ablauf_datum = new Date()

ablauf_datum.setTime(ablauf_datum.getTime() + gueltigkeitszeitraum)   document.cookie = cookie_name + "=" + escape(cookie_wert) + "; " +      "expires=" + ablauf_datum.toGMTString()  }  else   document.cookie = cookie_name + "=" + escape(cookie_wert) }

// Knoten ermitteln function set_nodes() {  var i

for(i = 0; i < (eintraege.length - 1); i++)   if(eintraege[i + 1].level > eintraege[i].level)   {    eintraege[i].node =  true    eintraege[i].open =  false   } }

// Aufnahme eines neuen Menueeintrags function neuer_eintrag(level, name, url, target, desc, image, image_open) {  this.level  = level  this.name  = name  this.url  = url  this.target  = target  this.node  = false  this.open  = false  this.description = desc  this.image  = image  this.image_open  = image_open }

// Eintrag vornehmen und Verzweigungsermittlung function eintrag(level, name, url, target, desc, image, image_open) {  var pos = eintraege.length

if(level < 1)  {   alert("Level-Werte bitte ab 1 anlegen!")   return  }

if(arguments.length < 2)  {   alert("Es muessen mindestens die ersten beiden Argumente angegeben werden.")   return  }

eintraege[pos] = new neuer_eintrag(level,       name,       (arguments.length > 2) ? url : null,       (arguments.length > 3) ? target : null,       (arguments.length > 4) ? desc : null,       (arguments.length > 5) ? image : null,       (arguments.length > 6) ? image_open : null) }

// Untermenue oeffnen oder schliessen function submenue(nr) {  // Alle Untermenues schliessen (ausser nr)  function close_submenues(nr)  {   var i   for(i = 0; i < eintraege.length; i++)    if((i != nr) && eintraege[i].node)     eintraege[i].open = false  }

// Untermenue nr exklusiv oeffnen  function open_submenues(nr)  {   function open_super_level(nr, lvl)   {    if((nr == 1) || (lvl < 1))     return

var i    for(i = nr - 1; i >= 0; i--)    {     if((eintraege[i].level == lvl) && eintraege[i].node)     {      eintraege[i].open = true      open_super_level(i, lvl - 1)      return     }    }    return   }

open_super_level(nr, eintraege[nr].level - 1)  }

eintraege[nr].open = !eintraege[nr].open  if((eintraege[nr].target != null) && (eintraege[nr].url != null))   frames[eintraege[nr].target].location.href = eintraege[nr].url  if(eintraege[nr].open && exclusive)  {   close_submenues(nr)   open_submenues(nr)  }  write_menue() }

// Alle Untermenues oeffnen function expand() {  var i

for(i = 0; i < eintraege.length; i++)   if(eintraege[i].node)    eintraege[i].open = true  write_menue() }

// Alle Untermenues schliessen function collapse() {  var i

for(i = 0; i < eintraege.length; i++)   if(eintraege[i].node)    eintraege[i].open = false  write_menue() }

// Kommentar in der Statuszeile anzeigen function show(comment) {  status = comment }

// Kommentar aus der Statuszeile entfernen function hide() {  status = "" }

// Ausgabe eines Menueeintrags function ausgabe(nr) {  with(self[frame_name].document)  {   var i   var tag_a_anfang = ""   var tag_a_ende = ""   var tags_pre = ""   var tags_post = ""   var tag_img  = ""   var titel  = ""   var bild  = ""

write("<TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0">\n<TR ALIGN="LEFT" VALIGN="CENTER">\n<TD>")

// Platzhalter   if(eintraege[nr].level > 1)    write("<IMG SRC="leer.gif" WIDTH="" + String(bild_breite * (eintraege[nr].level - 1)) + "" HEIGHT="" + String(bild_hoehe) + "" BORDER="0" ALT="">")

tag_a_ende = "</A>"

// Untermenues / normaler Eintrag   if(eintraege[nr].node)   {    titel = eintraege[nr].description ? eintraege[nr].description : eintraege[nr].name    bild = eintraege[nr].open ?      (eintraege[nr].image_open ? eintraege[nr].image_open : bild_menue_offen) :      (eintraege[nr].image ? eintraege[nr].image : bild_menue_geschlossen)

tags_pre = menue_pre    tags_post = menue_post    tag_a_anfang = "<A " +       "HREF="javascript:parent.submenue(" + String(nr) + ")" " +       "onMouseOver="parent.show('" + titel + "'); return true" " +       "onMouseOut="parent.hide()" " +       "TITLE="" + titel + """ +       ">"

}   else   {    titel = eintraege[nr].description ? eintraege[nr].description : eintraege[nr].name    bild = eintraege[nr].image ? eintraege[nr].image : bild_eintrag

tags_pre = eintrag_pre    tags_post = eintrag_post    tag_a_anfang = "<A " +       "HREF="" + eintraege[nr].url + "" " +       "onMouseOver="parent.show('" + titel + "'); return true" " +       "onMouseOut="parent.hide()" " +       (eintraege[nr].target ? (" TARGET="" + eintraege[nr].target + "" ") : "") +       "TITLE="" + titel + """ +       ">"

}

tag_img = "<IMG " +     "SRC="" + bild + "" " +     "WIDTH="" + String(bild_breite) + "" " +     "HEIGHT="" + String(bild_hoehe) + "" " +     "BORDER="0" " +     "NAME="" + bildname + String(nr) + "" " +     "ALT="" + titel + """ +     ">"

write(tag_a_anfang + tag_img + tag_a_ende)   write("</TD>\n<TD>")   write(tag_a_anfang + tags_pre + eintraege[nr].name + tags_post + tag_a_ende)

writeln("</TD>\n</TR>\n</TABLE>")

} }

// Ausgabe aller Eintraege eines Levels und eines Untermenues function ausgabe_eintraege(lvl, start) {  var i

with(self[frame_name].document)  {   for(i = start; i < eintraege.length; i++)   {    if(eintraege[i].level < lvl)     return    if(eintraege[i].level == lvl)    {     ausgabe(i)     if(eintraege[i].node)      if(eintraege[i].open)       ausgabe_eintraege(lvl + 1, i + 1)    }   }  } }

// Menuedokument schreiben (dynamisches Dokument erzeugen) function write_menue() {  with(self[frame_name].document)  {   open("text/html", "replace")

// Kopf   writeln("<HTML>\n<HEAD>\n<TITLE>Menü</TITLE>")   writeln("<!--\n\nGeneriert mit Hilfe des Menueskripts\nvon Dietmar Rabich, Duelmen.\n\nhttp://www.rabich.de\n\n-->")   writeln("<META NAME="AUTHOR" CONTENT="Dietmar Rabich">")   writeln("<META NAME="COPYRIGHT" CONTENT="Dietmar Rabich, Dülmen">")   writeln("<META NAME="ROBOTS" CONTENT="NONE">")   writeln("<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; CHARSET=iso-8859-1">")   writeln("<STYLE TYPE="text/css">\n<!--")   if(!a_underline)    writeln("A {text-decoration: none;}")   writeln("A:hover {color: #" + body_hover + ";}")   if(menue_style != "")    writeln("BODY, A, P, TD, H1, H2, H3, H4, H5, H6 {" + menue_style + "}")   writeln("//-->\n</STYLE>")   writeln("</HEAD>")

// Koerper   writeln("<BODY BGCOLOR="#" + body_bgcolor + "" TEXT="#" + body_text +     "" LINK="#" + body_link + "" ALINK="#" + body_alink +     "" VLINK="#" + body_vlink + "" LEFTMARGIN="" + rand +     "" TOPMARGIN="" + rand + "" MARGINWIDTH="" + rand +     "" MARGINHEIGHT="" + rand + """ +     (((body_background != "") && (body_background != null)) ? (" BACKGROUND="" + body_background + """) : "" ) + ">")   if(menue_titel != "")    writeln(menue_titel)   write("<P>")   ausgabe_eintraege(1, 0)   writeln("</P>")   if(extra)   {    write("<P ALIGN="CENTER">" + extra_pre)    if(!exclusive)     write("<NOBR>[ <A HREF="javascript:parent.expand()" TITLE="" + extra_text_expand + "">" + extra_text_expand + "</A> ]<WBR></NOBR> ")    write("<NOBR>[ <A HREF="javascript:parent.collapse()" TITLE="" + extra_text_collapse + "">" + extra_text_collapse + "</A> ]<WBR></NOBR>")    writeln(extra_post + "</P>")   }   if(copyright)   {    write("<HR SIZE="2" WIDTH="90%" ALIGN="CENTER" COLOR="" + body_text + "">\n<P ALIGN="CENTER"><SMALL><SMALL>")    write("Copyright © 2000 by <A HREF="http://www.rabich.de/" TARGET="_blank">Dietmar Rabich</A>, Dülmen.<BR>")    write("Alle Rechte vorbehalten.")    writeln("</SMALL></SMALL></P>")   }   writeln("</BODY>")   writeln("</HTML>")

close()  }

// Menues in Cookie merken  if(rebuild)  {   var s = ""   var i

for(i = 0; i < eintraege.length; i++)    if(eintraege[i].node)     if(eintraege[i].open)      s += ((s == "") ? "" : ",") + String(i)   write_cookie("OpenNodes", s, 1000 * 60 * 60 * 24 * 92)  } }

// === Menuefunktionen ==

// Ausgabe des kompletten Menues function menue() {  set_nodes()

// Menues/Cookie auswerten  if(rebuild)  {   var s = read_cookie("OpenNodes")   var sarr = s.split(",")   var i   var nr

for(i = 0; i < sarr.length; i++)   {    nr = parseInt(sarr[i])    if(!isNaN(nr))     if(eintraege[nr].node)      eintraege[nr].open = true   }  }

write_menue() }

// Menue mit IDs oeffnen function oeffne_menue_pfad(ids) {  set_nodes()

var sarr = ids.split(",")  var i  var nr

for(i = 0; i < sarr.length; i++)  {   nr = parseInt(sarr[i])   if(!isNaN(nr))    if(eintraege[nr].node)     eintraege[nr].open = true  }

write_menue() }

// === EOF ===

  1. Hallo,

    hab mir auch ein Javamenü aus dem internet geholt (von http://skripte.rabich.de/skripte/anwendungen/menue.html)
    leider ist es für einen 56Kmodem Benutzer total langsam..,.... kann ich da etwas an der Geschwindigkeit ändern ?

    1. das ist kein java, sondern ein Javascript Menue
    2. für das Geschwindigkeitsproblem dürfte in erster Linie das Gedudel verantwortlich sein (flash?).
    3. Vor Du irgend etwas anderes versuchst: Befasse dich erst einmal mit dem Aufbau von html Seiten, und insbesondere mit dem Aufbau der Framedefinition. Die ist so wirr, daß es an ein Wunder grenzt, daß die Seite überhaupt angezeigt wird. Hilfestellung dazu: SELFHTML

    Und wenn Du nicht weiterkommst: hier im Forum wirst Du geholfen - aber sicher erst, wenn Du dich um obige Punkte ernsthaft bemühst.

    Gruß Fritz

    --
    ss:| zu:) ls:[ fo:| va:) ch:? n4:& rl:? br:& js:| ie:| fl:|
  2. hi,

    hab mir auch ein Javamenü aus dem internet geholt

    java ist immer noch nicht das gleich wie javascript.

    leider ist es für einen 56Kmodem Benutzer total langsam..,.... kann ich da etwas an der Geschwindigkeit ändern ?

    was soll die bandbreite des anfordernden users mit der geschwindigkeit zu tun haben?
    wenn dein menü aus zu viel code besteht, dann kürze entsprechend, oder verwende ein anderes.
    (setTimeout o.ä. kann ich darin jetzt nicht erkennen ...)

    un deinen kompletten code hier zu posten fällt auch nur unter "zumüllen" des forums, es hilft dir wohl kaum weiter - lies mal </faq/#Q-07c>, anfang zweiter abschnitt.

    gruss,
    wahsaga

  3. Hallo,

    wie Fritz schon sagte: die Musik ist es. Das JS-menü (und die Seite) würden ohne Musik nicht nur schneller, sondern auch besser.

    Ansonsten zur Warnung: wie sind hier ein Verein von Selbermachern. Beim selbermachen helfen wir gerne, dazu gehört natürlich auch ab und an mal das rumspielen und rumtesten fertiger Scripte dritter. Aber ein komplettes Script dritter anaylisieren wir eher nicht.... Dein Problem dürfte aber mit der Entfernung der Musik eh gelöst sein....

    Chräcker