Rekursiv kald til menustruktur, performence optimering?
Hej EksperterJeg 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>