Använder en treeviewmeny som funkar fint. Men nu är det så att det är väldigt mycket data som hämtas så den blir väldigt seg. En vän sa nåt att man skulle göra så att:
skapa en cache. lagra ett "dictionary object" i Application-object ...
Men hur gör man det?
Koden för det som skriver ut menyn:
<script type="text/javascript">
<!--
d = new dTree('d');
d.add(0,-1,'');
<%Function Meny(Conn, HuvudId)
Set RS = Conn.Execute("SELECT * FROM tbl_prodkat WHERE ukategori = " & HuvudId & " order by kategori")
If Not RS.EOF Then
Do Until RS.EOF
strID = RS("pkID")
strNamn = RS("kategori")
strUID = RS("ukategori")
Set Check = Conn.Execute("SELECT * FROM tbl_prodkat WHERE ukategori = " & strID)
If Not Check.EOF Then%>
d.add(<%=strID%>,<%=strUID%>,'<%=strNamn%>','produkt.asp?kat=<%=strID%>','<%=strNamn%>','','','','');
<%Else%>
d.add(<%=strID%>,<%=strUID%>,'<%=strNamn%>','produkt.asp?kat=<%=strID%>','<%=strNamn%>','','','','');
<%End If
Check.CLose:Set Check=Nothing
Meny Conn, strID
RS.MoveNext
Loop
End If
RS.Close:Set RS=Nothing
End Function
Meny Conn, 0%>
document.write(d);
//-->
</script>
1. Hämta inte med "SELECT *", utan plocka bara ut det som behövs
2. If RS.EOF körs i onödan
3. Check-funktionen ska du hoppa över, eftersom du inte verkar bry dig om resultatet.
Möjliga optimeringar:
4. Fråga databasen direkt om det finns några "barn", så att frågan inte måste köras i onödan.
Ex (kan göras med subselect också)
SELECT k1.pkID,k1.kategori,k1.ukategori,COUNT(k2.pkID) as antalBarn
FROM tbl_prodkat k1
LEFT OUTER JOIN tbl_prodkat k2 ON k2.ukategori=k1.pkID
GROUP BY k1.pkID,k1.kategori,k1.ukategori
och
if antalBarn>0 then
Meny Conn, strID
end if
5. Hämta ut alla kategorier i ett stort recordset och använd Filter-egenskapen för att söka. Metoden är egentligen inte så snabb, men det beror på vad man jämför med.
RS.Filter="ukategori = " & strID
6. Spara nodstrukturen i annat format i Application, helst som en sträng. Man bör undvika att lagra ett Dictionary i Application, av diverse tekniska skäl som vi inte behöver gå in på.
Tackar för tipsen :) Skall se om jag fåt till detta. Men 5 och 6 vet jag ej om jag kikar på. Iallafall inte 6 för det vet jag inte riktigt hur man ska göra.
136 ms totalt · 3 externa anrop · v20260731065814-full.b746b907