Avatar billede jacob_hs Nybegynder
04. oktober 2004 - 11:54 Der er 1 løsning

Rekursiv kald til menustruktur, performence optimering?

Hej Eksperter
Jeg har et system med en menustruktur i flere niveauer, denne menu laves på følgende måde, og på sin vis virker det fint. Men rent performence mæssigt er det ikke særlig kønt med mine øjne, men kan ikke lige gennemskue hvordan man kan optimere dette.

Jeg starter med at hente alt indholdet fra menutabellen ind og derefter travasere jeg gennem denne og udskriver de respektive sider, men på den baggrund laver jeg utrolig mange gennemløb?

Tabellen menu består af følgende

menuid, parentmenuid, prioritet, menupunkt


Håber der er nogle der kan hjælpe



<%
set conn = server.createobject("ADODB.connection")
conn.Open application("dbconx")


Set rsItem = Server.CreateObject("ADODB.Recordset")

rsItem.open "SELECT Menu.MenuId, Menu.ParentId, Menu.Prioritet, menu.interntnavn FROM Menu  ORDER BY Prioritet desc;", conn


if NOT rsItem.EOF then
    rsarr = rsItem.GetRows()
    ikketom = true
else
    ikketom = false
end if
rsItem.close
%>


<table border=0 width="300">

<%
function menuListeTrae1

    for row=0 to Ubound(rsarr,2)
        menuID = rsarr(0,row)
        parent = rsarr(1,row)
        prioritet = rsarr(2,row)
        menu = rsarr(3,row)

        if(parent=0) then
            id=menuID
            url = request.servervariables("PATH_INFO") & "?show=rediger&id=" & id
            %>
            <TR ID="p<%= id %>">
                <TD><A HREF="<%= url %>"><b><%= menu %></b></A></TD>
                <TD align="right"><A HREF="<%= url %>" TARGET="content"><b><%= prioritet %></b></A></TD>
            </TR>
            <%

            underMenuListe1 menuID,0
        end if

    next
end function

function underMenuListe1(parentID,raek)
    for j=0 to Ubound(rsArr,2)
        lokalMenuID = rsArr(0,j)
        lokalParentId = rsArr(1,j)
        prioritet = rsArr(2,j)
        menu = rsArr(3,j)

        if( parentID=lokalParentId) then
            indryk = "<IMG SRC=""spacer.gif"" HEIGHT=""1"" WIDTH=""" & ((raek+1) * 16) & """ BORDER=""0"">"
            id=LokalMenuID
            url = request.servervariables("PATH_INFO") & "?show=rediger&id=" & id
            %>
            <TR ID="p<%= id %>">
                <TD><A HREF="<%= url %>"><%= indryk &menu %></A></TD>

                <TD align="right"><A HREF="<%= url %>" TARGET="content"><%= prioritet %></A></TD>

            </TR>
            <%

            '***Rekursivt kald***
            underMenuListe1 lokalMenuID, raek+1
        end if

    next
end function

if (ikketom<>false) then
    call menuListeTrae1()
else
    Response.Write "<tr><td colspan=4><b>Desværre ingen sider</b></td></tr>"
end if
%>

</table>
Avatar billede jacob_hs Nybegynder
01. november 2004 - 12:16 #1
Jeg lukker spørgsmålet..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester