webForumDet fria alternativet

Hjälp med att optimera lite kod

ASP

6 svar · 208 visningar · startad av klementin

Medlem sedan aug. 2001117 inlägg
Frågan#1

Hej!
Undrar om det finns någon som skulle vilja hjälpa mig att optimera denna kod. Koden fungerar precis som jag vill men den är otroligt inefektiv och prestanda krävande (tror jag iallfall). Mina ASP kunskaper sträcker sig inte längre än till denna typ av kod så därför skulle jag vara tacksam om någon ville hjälpa mig att fixa till den så att jag vet till nästa gång. Har sökt både här och där efter tips men inte fått till det då. Jag tror att man ska skapa lite arrays och dyl. för att få det att bli bra/snyggt men jag vet inte hur. Databasen finns bifogad i en ZIP-fil här i inlägget.
Tack på förhand!

	<%

	s_db_name = "db"

	s_db_path = "E:\_array\" & s_db_name & ".mdb"

	Set Conn = Server.CreateObject("ADODB.Connection")
	Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & s_db_path & ";"

	s_cat_open = Request("f_cat_open")

	If s_cat_open <> "" Then

		v_cat_open_array = split(s_cat_open, ",")

		For i = 0 To UBound(v_cat_open_array)
	
			If i=0 Then s_cat_main_value = CInt(v_cat_open_array(i))
			If i=1 Then s_cat_sub_value = CInt(v_cat_open_array(i))
			If i=2 Then s_cat_item_value = CInt(v_cat_open_array(i))
	
		Next

	End If

	SQL = "SELECT d_cat_main_value FROM tbl_cat_main"

	Set rs = Conn.Execute(SQL) 

	If Not rs.EOF Then

		s_count = 0
		s_cat_main_value = ""

		Do Until rs.EOF

			If Not s_cat_main_value = rs("d_cat_main_value") Then

				s_count = s_count +1

			End If

			s_cat_main_value = rs("d_cat_main_value")

			rs.MoveNext

		Loop

	End If

	Response.Write "<FORM action=""" & Request.ServerVariables ("SCRIPT_NAME") & """ method=""POST"" name=""f_cat"">"

	Response.Write "<SELECT name=""f_cat_open"">"
	Response.Write "<OPTION value="""">Välj:</OPTION>"

	SQL = "SELECT d_cat_main_value FROM tbl_cat_main ORDER BY d_cat_main_value ASC"

	Set rs = Conn.Execute(SQL) 

	If Not rs.EOF Then

		v_array = rs.GetRows()

	End If

	For i = 0 To s_count -1

		SQL = "SELECT d_cat_main_value, d_cat_main_text FROM tbl_cat_main WHERE d_cat_main_value =  " & v_array(0,i) & " ORDER BY d_cat_main_value ASC"

		Set rs = Conn.Execute(SQL) 

		If Not rs.EOF Then

			Response.write "<OPTGROUP label=""" & rs("d_cat_main_text") & """ style=""background-color: #EFEFEF;"">"

			SQL = "SELECT d_cat_sub_type, d_cat_sub_value, d_cat_sub_text FROM tbl_cat_sub WHERE d_cat_main_value =  " & v_array(0,i) & " ORDER BY d_cat_sub_value ASC"

			Set rs = Conn.Execute(SQL) 

			If Not rs.EOF Then

				Do Until rs.EOF

					If rs("d_cat_sub_text") <> "" Then

						If IsNumeric(rs("d_cat_sub_value")) Then

							If rs("d_cat_sub_type") = 1 Then

								Response.write "<OPTGROUP label=""" & rs("d_cat_sub_text") & """ style=""background-color: #FFFFFF;"">"

								SQL2 = "SELECT d_cat_item_value, d_cat_item_text FROM tbl_cat_item WHERE d_cat_main_value =  " & v_array(0,i) & " AND d_cat_sub_value = " & rs("d_cat_sub_value") & " ORDER BY d_cat_item_value ASC"

								Set rs2 = Conn.Execute(SQL2) 
								If Not rs2.EOF Then

									Do Until rs2.EOF

										If rs2("d_cat_item_text") <> "" Then

											If IsNumeric(rs2("d_cat_item_value")) Then

												If CInt(s_cat_main_value) = v_array(0,i) And CInt(s_cat_sub_value) = rs("d_cat_sub_value") And CInt(s_cat_item_value) = rs2("d_cat_item_value") Then 

													Response.write "<OPTION value=""" & v_array(0,i) & "," & rs("d_cat_sub_value") & "," & rs2("d_cat_item_value") & """ style=""background-color: #FFFFFF;"" selected>" & rs2("d_cat_item_text") & "</OPTION>"

												Else

													Response.write "<OPTION value=""" & v_array(0,i) & "," & rs("d_cat_sub_value") & "," & rs2("d_cat_item_value") & """ style=""background-color: #FFFFFF;"">" & rs2("d_cat_item_text") & "</OPTION>"

												End If

											End If

										End If

										rs2.MoveNext

									Loop

									Response.Write "</OPTGROUP>"

								End If

							ElseIf rs("d_cat_sub_type") = 2 Then

								Response.Write "<OPTION value=""" & v_array(0,i) & "," & rs("d_cat_sub_value") & """ style=""background-color: #FFFFFF;"">" & rs("d_cat_sub_text") & "</OPTION>"

							End If

						End If

					End If

					rs.MoveNext

				Loop

			End If

			Response.Write "</OPTGROUP>"

		End If

	Next

	Response.Write "</SELECT>"
	Response.Write "<INPUT type=""SUBMIT"" name=""f_cat_submit"" value=""Öppna"">"

	Response.Write "</FORM>"

	Conn.Close
	Set Conn = Nothing

%>
Medlem sedan mars 20021 889 inlägg
#2

Oj! Jag jag inte ork nog att gå igenom hela din kod och ändra men någon annan känner kanske för det (?!).

Det du måste göra är att lära dig lite om INNER JOINS för att slippa att loopa genom så många RecorcdSets. Kolla t ex på https://www.devguru.com

I och med att du har tre loopar (vad jag såg) i varandra så måste ASP-motorn köra genom allting väldigt många gånger. Nämligen:

x * y * z

Så om x innehåller tusen poster, y tusen och z tusen så är du uppe i ganska många miljoner... ;)

:)

Medlem sedan sep. 2002538 inlägg
#3

En sak som jag ser att du missat på flera ställen är att deklarera dina variablar och konstanter.

Medlem sedan mars 20021 889 inlägg
#4

alj skrev:

En sak som jag ser att du missat på flera ställen är att deklarera dina variablar och konstanter.

Det har han gjort men det är småpotatis jämfört med looparna.

;)

Medlem sedan sep. 2002538 inlägg
#5

trexter skrev:

alj skrev:

En sak som jag ser att du missat på flera ställen är att deklarera dina variablar och konstanter.

Det har han gjort men det är småpotatis jämfört med looparna.

;)

Många bäckar små...

Medlem sedan aug. 2001117 inlägg
#6

Tack för att ni orkade titta lite. Att jag inte har deklarera mina variablar och konstanter beror på att jag alltid gör det när koden är klar. Hmm, inner join... får söka lite här på forumet tror jag. Har aldrig använd det förut.

Medlem sedan aug. 2001117 inlägg
#7

FAN! Fattar inte ett skit av INNER JOIN x(

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