webForumDet fria alternativet

Optimera kod för snabb laddning.

ASP

42 svar · 453 visningar · startad av brw · sida 2 av 3

Frågan, av brw

God morgon! Jag har en "liten" kodsnutt som presenterar en meny från en databas som laddar om sidan när man klickat på ett val så kommer en undermeny upp. Jag tycker den laddar lite segt.. visserligen beror det ju lite på webbservern och snabbheten på linan men man kan ju försöka få ner koden så optimal som möjligt. Jag har försökt så gott jag kan och tänkte om någon har lust att hjälpa mig oc

Läs frågan i sin helhet →
Medlem sedan maj 2001431 inlägg
#21

Anledningen till att din sida blir seg beror på att du loopar skapandet av recordset:s. Det är närmast en dödssynd!

Fel på lite <% %> osv. är normalt inget problem.

------------------
En eller annan godbit från pannan

Medlem sedan juli 2000619 inlägg
#22

Vad har du för förslag istället då?

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan maj 2001431 inlägg
#23

Jag har inte mer än ögnat på din kod, men det ser ut som du skulle kunna lösa det hela med en join och lite logik i ASP-koden.

------------------
En eller annan godbit från pannan

Medlem sedan juni 20008 205 inlägg
#24

Toonster, vad yrar du om? ;)

Ska man skriva ett Javascript med response.write blir det problem, eftersom man i Javascript har ' och inte ", då kan man ha "" som blir ' i den genererade koden.

Jag vet att du vet hur C-liknande syntax funkar, men så här gör man förstås:

Response.Write('Det går att använda \'enkelfnuttar\'... ');
Response.Write("... och \"dubbelfnuttar\" utan problem.");

------------------
"There's no such thing as a stupid question, only stupid people"

[Redigerat av spango den 14 aug 2001]

Medlem sedan juli 2000619 inlägg
#25

Herman.. du skulle inte kunna bistå med ett förslag på en JOIN och som du kallar det logik? så får man se på lite alternativ.. :)

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan maj 2001431 inlägg
#26

Som jag förstår det räcker det typ att join:ar menykategori.menyvalid=menyval.id
och sorterar efter menyval.ordning.

Sedan i ASP koden If:ar du om fälten från menykategori ska skrivas ut eller inte.

------------------
En eller annan godbit från pannan

Medlem sedan juli 2000619 inlägg
#27

Hehe okej!

Jag har sökt runt lite här och det jag kan konstatera är att det lär bli en rejäl prestandaförbättring med att använda join.

Jag har aldrig använt join utan enbart kört med loopar i loopar * :r skämms *

Så jag pastar in min kod lite förkortad här så kanske nån kan visa hur det skulle kunna se ut om jag använder join.

<%
Dim SQLmenyval, rsmv, dl, mvurl, SQLmenylank, RSml

SQLmenyval = "Select id, title, menyval, dl, url, target FROM menyval WHERE menyid = 26 ORDER BY ordning ASC"
Set RSmv = Connection.Execute(SQLmenyval)

Do until RSmv.EOF
valid = RSmv("id")
menyval = RSmv("menyval")
dl = RSmv("dl")
mvurl = RSmv("url")
%>

<%=mvurl%>

<%
SQLmenylank = "Select url, menykategori FROM menykategori WHERE menyvalid = "& valid &" ORDER BY ordning ASC"
Set RSml = Connection.Execute(SQLmenylank)

Do until RSml.EOF
url = RSml("url")
menykategori = RSml("menykategori")
%>

<%=menykategori%>

<%
RSml.Movenext
Loop
RSml.Close
Set RSml = Nothing
%>

<% 
RSmv.Movenext
Loop
RSmv.Close
Set RSmv = Nothing
Connection.Close
Set connection = Nothing
%>

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan mars 20002 836 inlägg
#28

Något sådant:

<%
Dim SQLmenyval, rsmv, dl, mvurl, SQLmenylank, intLastMVID

SQLmeny = "Select menyval.id as mvid, menyval.title, menyval. menyval, menyval.dl, menyval.url as mvurl, menyval.target, " & _
	"menykategori.url as mkurl, menykategori.menykategori " & _
	"FROM menyval, menykategori " & _
	"WHERE (menyval.id = menykategori.menyvalid) AND menyval.menyid = 26 ORDER BY ordning ASC"

Set RSmv = Connection.Execute(SQLmeny)

Do until RSmv.EOF
	valid = RSmv("mvid")
	menyval = RSmv("menyval")
	dl = RSmv("dl")
	mvurl = RSmv("mvurl")

	If intLastMVID <> valid Then
		Response.Write mvurl
	End If

	url = RSml("mkurl")
	menykategori = RSml("menykategori")

	Response.write menykategori

	intLastMVID = valid

	RSmv.Movenext
Loop

RSmv.Movenext
Loop
RSmv.Close
Set RSmv = Nothing
Connection.Close
Set connection = Nothing
%>

som sagt ... e otestad kod ...

cya,
PatrikB

------------------
*så kan det gå när inte haspen är på*

[Redigerat av PatrikB den 15 aug 2001]

Medlem sedan feb. 200112 078 inlägg
#29

En fråga bara..

[b]([/b]menyval.id = menykategori.menyvalid[b])[/b] AND menyval.menyid = 26 ORDER BY ordning ASC"
menyval.id = menykategori.menyvalid

vad gör paranteserna för nytta där? :q

------------------
I have comed to take what is rightfully mine. Existence in eternity. And all i need is your creditcard number. | Existence

[Redigerat av OveRRidE den 15 aug 2001]

Medlem sedan maj 2001431 inlägg
#30

Ingen mer nytta än att kanske öka läsbarheten för ett långt uttryck.

Medlem sedan juli 2000619 inlägg
#31

Jag får fan inte till det..

Med den kod jag fick så skriver den bara ut en undermeny.. det kan ju i princip vara hur många som helst.. och sen skriver den bara ut de som har undermeny.. om det finns en länk som inte har undermeny så kommer den inte med.

Exemel på hur den skriver ut:

Produkter
- Kaninfoder

Kontakta oss
- Mailformulär

Det kan ju vara

Produkter
- Kaninfoder
- Hundmat
- Leksaker

Kontakta oss
- Mailformulär
- Telefon

Sök (utan undermeny)

Har nån lust att hjälpa mig få till koden nedan med innerjoin så att sidan laddar snabbare?

Såhär ser min kod ut när den fungerar och inte använder innerjoin:

<script language="JavaScript">
var myNavBar = new NavBar(780);
myNavBar.setSizes(0, 2, 0);
var tempMenu;
myNavBar.setColors("#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#000000", "#CCCCCC");
myNavBar.setFonts("Verdana, Arial, Geneva", "plain", "normal", "10px", "Verdana, Arial, Geneva", "plain", "normal", "10px");
myNavBar.setAlign("left");
				  

<%
Dim SQLmenyval, rsmv, dl, mvurl, SQLmenylank, RSml

SQLmenyval = "Select id, title, menyval, dl, url, target FROM menyval WHERE menyid = 26 ORDER BY ordning ASC"
Set RSmv = Connection.Execute(SQLmenyval)

Do until RSmv.EOF
valid = RSmv("id")
menyval = RSmv("menyval")
dl = RSmv("dl")
mvurl = RSmv("url")
%>

tempMenu = new NavBarMenu(0, 140);

<% If dl = "j" Then %>
tempMenu.addItem(new NavBarMenuItem('&nbsp;<%=menyval%>&nbsp;', "<%=mvurl%>"));

<% Else %>

tempMenu.addItem(new NavBarMenuItem('&nbsp;<%=menyval%>&nbsp;', "#"));

<% End If %>

<%
SQLmenylank = "Select url, menykategori FROM menykategori WHERE menyvalid = "& valid &" ORDER BY ordning ASC"
Set RSml = Connection.Execute(SQLmenylank)

Do until RSml.EOF
url = RSml("url")
menykategori = RSml("menykategori")
%>

tempMenu.addItem(new NavBarMenuItem('&nbsp;<%=menykategori%>', "<%=url%>"));

<%
RSml.Movenext
Loop
RSml.Close
Set RSml = Nothing
%>

myNavBar.addMenu(tempMenu);

<% 
RSmv.Movenext
Loop
RSmv.Close
Set RSmv = Nothing
%>

function init() {
  myNavBar.create();
}
</script>

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan dec. 200012 464 inlägg
#32
<script language="JavaScript">
var myNavBar = new NavBar(780);
myNavBar.setSizes(0, 2, 0);
var tempMenu;
myNavBar.setColors("#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#000000", "#CCCCCC");
myNavBar.setFonts("Verdana, Arial, Geneva", "plain", "normal", "10px", "Verdana, Arial, Geneva", "plain", "normal", "10px");
myNavBar.setAlign("left");

<%
Dim SQLmenyval, rsmv, dl, mvurl,mkurl,oldid,menykategori

SQLmenyval = "Select m.id,m.title, m.menyval, m.dl, m.url, " & _
" m.target, mk.url as mkurl, mk.menykategori " &_
" FROM menyval as m left join  menykategori as mk on m.id = mk.menyvalid " &_
" WHERE m.menyid = 26 " & _
" ORDER BY m.ordning ASC"
Set RSmv = Connection.Execute(SQLmenyval)

oldid = 0
Do until RSmv.EOF
valid = RSmv("id")
if  clng(oldid) <> clng(valid) then
    menyval = RSmv("menyval")
    dl = RSmv("dl")
    mvurl = RSmv("url")
    oldid = valid
%>
tempMenu = new NavBarMenu(0, 140);

<%If dl = "j" Then %>

tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "<%=mvurl%>"));

<% Else %>

tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "#"));

<% End If 

End if %>

mkurl = RSmw("mkurl")
menykategori = RSmw("menykategori")
if not isnull(mkurl) then
%>

tempMenu.addItem(new NavBarMenuItem(' <%=menykategori%>', "<%=mkurl%>"));

myNavBar.addMenu(tempMenu);

<% 
end if
RSmv.Movenext
Loop
RSmv.Close
Set RSmv = Nothing
%>

function init() {
myNavBar.create();
}
</script>

------------------
essentitia preter non sans multiplicandum

red: lite småfel.

[Redigerat av LarsG den 27 aug 2001]

Medlem sedan juli 2000619 inlägg
#33

Tackar lasseG.. :)

det fungerar nästan som jag vill ha det.. men det är fan klurigt det här med join så jag skulle behöva lite hjälp att finjustera det sista.

Med följande kod

<script language="JavaScript">
var myNavBar = new NavBar(780);
myNavBar.setSizes(0, 2, 0);
var tempMenu;
myNavBar.setColors("#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#000000", "#CCCCCC");
myNavBar.setFonts("Verdana, Arial, Geneva", "plain", "normal", "10px", "Verdana, Arial, Geneva", "plain", "normal", "10px");
myNavBar.setAlign("left");

<%
Dim SQLmenyval, rsmv, dl, mvurl,mkurl,oldid,menykategori

SQLmenyval = "Select m.id,m.title, m.menyval, m.dl, m.url, " & _
" m.target, mk.url as mkurl, mk.menykategori " &_
" FROM menyval as m left join menykategori as mk on m.id = mk.menyvalid " &_
" WHERE m.menyid = 26 " & _
" ORDER BY m.ordning ASC"
Set RSmv = Connection.Execute(SQLmenyval)

oldid = 0
Do until RSmv.EOF
valid = RSmv("id")
if clng(oldid) <> clng(valid) then
menyval = RSmv("menyval")
dl = RSmv("dl")
mvurl = RSmv("url")
oldid = valid
%>
tempMenu = new NavBarMenu(0, 140);

<%If dl = "j" Then %>

tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "<%=mvurl%>"));

myNavBar.addMenu(tempMenu);
<% Else %>

tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "#"));

<% 
End If 
End if 
%>

<%
mkurl = RSmv("mkurl")
menykategori = RSmv("menykategori")
if not isnull(menykategori) then
%>
tempMenu.addItem(new NavBarMenuItem(' <%=menykategori%>', "<%=mkurl%>"));
<% End If %>

myNavBar.addMenu(tempMenu);

<%
RSmv.Movenext
Loop
RSmv.Close
Set RSmv = Nothing
%>

function init() {
myNavBar.create();
}
</script>

så skriver den ut posterna såhär:

Om det är direktlänk så ska den skriva ut följande 3 rader:

tempMenu = new NavBarMenu(0, 140);
tempMenu.addItem(new NavBarMenuItem(' Startsida ', "default.asp"));
myNavBar.addMenu(tempMenu);

Ovanstående är rätt.. men när den skriver ut en meny som har underkategorier dvs.. att det direktlänk = "n" så skriver den såhär:

tempMenu = new NavBarMenu(0, 140);
tempMenu.addItem(new NavBarMenuItem(' Fakta ', "#"));
tempMenu.addItem(new NavBarMenuItem(' Utbildning', ""));
myNavBar.addMenu(tempMenu);
tempMenu.addItem(new NavBarMenuItem(' Historia', ""));
myNavBar.addMenu(tempMenu);
tempMenu.addItem(new NavBarMenuItem(' Personal', ""));
myNavBar.addMenu(tempMenu);

Såhär ska det se ut: (det är alltså en ny post i menyval.. den första som heter startsida var direktlänk = "j" och sen kommer nästa post som är Fakta som har direktlänk = "n" och den har undermeny med utbildning, historia mm som menyval.. då ska den ju loopa fram alla som är i undermenyn fast utan den där myNavBar.addMenu(tempMenu) efter varje rad.. det ska den göra när den är klar.. när det inte finns några fler i den undermenyn...):

tempMenu = new NavBarMenu(0, 140);
tempMenu.addItem(new NavBarMenuItem(' Fakta ', "#"));
tempMenu.addItem(new NavBarMenuItem(' Utbildning', ""));
tempMenu.addItem(new NavBarMenuItem(' Historia', ""));
tempMenu.addItem(new NavBarMenuItem(' Personal', ""));
myNavBar.addMenu(tempMenu);

Kan du hjälpa mig få de att fungera så vore det bussigt.

------------------
Ingenting är omöjligt, bara en utmaning.

[Redigerat av brw den 28 aug 2001]

Medlem sedan dec. 200012 464 inlägg
#34

Jodå, jag kan titta på det i kväll.

------------------
essentitia preter non sans multiplicandum

Medlem sedan dec. 200012 464 inlägg
#35

Så, nu är det kväll.

<script language="JavaScript">
var myNavBar = new NavBar(780);
myNavBar.setSizes(0, 2, 0);
var tempMenu;
myNavBar.setColors("#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#000000", "#CCCCCC");
myNavBar.setFonts("Verdana, Arial, Geneva", "plain", "normal", "10px", "Verdana, Arial, Geneva", "plain", "normal", "10px");
myNavBar.setAlign("left");
<%
Dim SQLmenyval, rsmv, dl, mvurl,mkurl,oldid,menykategori

SQLmenyval = "Select m.id,m.title, m.menyval, m.dl, m.url, " & _
" m.target, mk.url as mkurl, mk.menykategori " &_
" FROM menyval as m left join menykategori as mk on m.id = mk.menyvalid " &_
" WHERE m.menyid = 26 " & _
" ORDER BY m.ordning ASC"
Set RSmv = Connection.Execute(SQLmenyval)

oldid = 0
Do until RSmv.EOF
valid = RSmv("id")
if clng(oldid) <> clng(valid) then
   if  cint(oldid) <> 0 then
%>
       myNavBar.addMenu(tempMenu); 
<%
   end if
menyval = RSmv("menyval")
dl = RSmv("dl")
mvurl = RSmv("url")
oldid = valid
%>
tempMenu = new NavBarMenu(0, 140);

<%If dl = "j" Then %>

tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "<%=mvurl%>"));

<% Else %>

tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "#"));

<% 
End If 
End if 
%>

<%
mkurl = RSmv("mkurl")
menykategori = RSmv("menykategori")
if not isnull(menykategori) then
%>
tempMenu.addItem(new NavBarMenuItem(' <%=menykategori%>', "<%=mkurl%>"));
<% End If %>

<%
RSmv.Movenext
Loop
RSmv.Close
Set RSmv = Nothing
%>

function init() {
myNavBar.create();
}
</script>

Så, hoppas det blir bättre, har dock ingen möjlighet att testa.

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 28 aug 2001]

Medlem sedan juli 2000619 inlägg
#36

Tackar Lasse... nu fungerar det skitbra!

Men en fråga.. jag vill sortera menykategori efter ORDER BY ordning ASC .. vad ska jag lägga till?

Den visar dem lite hur som helst.. men huvudvalen blir rätt..

Förresten.. känner du till nån "ASP kurs" typ Wides eller någon annans som går igenom join mm? så man kan lära sig verkar ju fan bra krångligt ;)

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan juli 2000619 inlägg
#37

Hehe glöm ovanstående.. jag löste det

:)

" ORDER BY m.ordning, mk.ordning ASC"

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan dec. 200012 464 inlägg
#38

Jaså, du har inte problem med att sista menyn inte kommer ut ordentligt?

<script language="JavaScript">
var myNavBar = new NavBar(780);
myNavBar.setSizes(0, 2, 0);
var tempMenu;
myNavBar.setColors("#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#000000", "#CCCCCC");
myNavBar.setFonts("Verdana, Arial, Geneva", "plain", "normal", "10px", "Verdana, Arial, Geneva", "plain", "normal", "10px");
myNavBar.setAlign("left");
<%
Dim SQLmenyval, rsmv, dl, mvurl,mkurl,oldid,menykategori
SQLmenyval = "Select m.id,m.title, m.menyval, m.dl, m.url, " & _
" m.target, mk.url as mkurl, mk.menykategori " &_
" FROM menyval as m left join menykategori as mk on m.id = mk.menyvalid " &_
" WHERE m.menyid = 26 " & _
" ORDER BY m.ordning ASC"
Set RSmv = Connection.Execute(SQLmenyval)

oldid = 0
Do until RSmv.EOF
valid = RSmv("id")
if clng(oldid) <> clng(valid) then
if cint(oldid) <> 0 then
%>
myNavBar.addMenu(tempMenu); 
<%
end if
menyval = RSmv("menyval")
dl = RSmv("dl")
mvurl = RSmv("url")
oldid = valid
%>
tempMenu = new NavBarMenu(0, 140);

<%If dl = "j" Then %>

tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "<%=mvurl%>"));

<% Else %>

tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "#"));

<% 
End If 
End if 
%>

<%
mkurl = RSmv("mkurl")
menykategori = RSmv("menykategori")
if not isnull(menykategori) then
%>
tempMenu.addItem(new NavBarMenuItem(' <%=menykategori%>', "<%=mkurl%>"));
<% End If %>

<%
RSmv.Movenext
Loop
[b] if oldid <> 0 then
%>
myNavBar.addMenu(tempMenu); 
<%
[/b]
RSmv.Close
Set RSmv = Nothing
%>

function init() {
myNavBar.create();
}
</script>

Tycker att det med fetstil borde vara med.

------------------
essentitia preter non sans multiplicandum

Medlem sedan juli 2000619 inlägg
#39

hehe ;) helt missat den sista.. allt såg jävligt bra ut men du har rätt.. den sista fanns inte med.. men nu har jag fixat till det.

Tack ska du ha!

------------------
Ingenting är omöjligt, bara en utmaning.

Medlem sedan juli 2000619 inlägg
#40

Hmm.. det fungerar bra på jobbet där jag har SQLserver.. men jag tänkte använda det lite hemma också.. men då får jag felet: "kopplingsuttrycket stöds inte"

hur ska jag få till det? vad behöver jag ändra?

red: Jag kör Access 2000 hemma

------------------
Ingenting är omöjligt, bara en utmaning.

[Redigerat av brw den 29 aug 2001]

267 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)