Just nu i M3-nätverket
Jump to content

Optimering


Rest man Klaymen

Recommended Posts

Rest man Klaymen

Hej!

 

Jag hade ett webcommunity uppe för ett tag sedan, fick nåt hundratal användare, men nu har jag lagt ner det på grund av buggar, långsamma script med mera. Det hela var byggt efterhand som jag förstod vad som behövdes, och därför var det hela lite dåligt strukturerat.

 

Nu funderar jag dock på att göra om hela rasket, men den här gången göra det ordentligt. Jag har en ganska unik idé för detta, som jag hoppas kommer att tilltala folk. Innan jag börjar har jag dock ett antal frågor som jag skulle vilja ha svar på, frågor om optimering med mera.

 

1. Jag ska använda MySQL istället för MsAccess den här gången, dels av säkerhetsskäl, dels för att jag hört att MySQL är bättre. Har inte mycket erfarenhet av MySQL, men som jag har förstått det öppnar man ju inte databaserna i ett program, som Access, utan redigerar, skapar och tar bort tabeller genom att skriva SQL-satser i ett ASP-dokument. Rätt? Annars kanske någon kan förklara hur det går till. Fördelen är väl att man slipper stänga webplatsen för att lägga till/ta bort kolumner eftersom inga filer behöver laddas ner/upp. Eller?

 

2. Vilken nytta gör vissa scriptrader som till synes kan skippas. Behöver man till exempel deklarera variabler innan ett script? Jag har kört hundratals skript utan att använda Dim en enda gång, och det har fungerat utmärkt. Bör jag använda det eller inte, samt varför?

 

3. När man hämtar flera tabeller på samma gång, som ska korsreferera till varandra, vilket är smartast, att skapa ett RecordSet med alla kolumnerna från båda tabellerna i varje post, eller att hämta en post i taget från den ena och skapa ett extra recordset för varje post, där man hämtar referensdata ur den andra tabellen, för att sedan stänga den andra recordseten innan man går vidare till nästa post?

 

4. Vilket är det bästa sättet att göra ett login-script? Förmodligen blir det sessions den här gången också, men hur ska jag göra rent praktiskt. Förra gången gjorde jag så att om session("username") var tom så kom man till login-sidan. där fick man skriva in username och password, och om dom stämde med användardatabasen så tilldelades session("username") användarens namn. Problemet var att jag var tvungen att kolla massa saker varje gång, plus att det var otympligt att ha en massa sessionscookies hängande i bakgrunden hela tiden.

 

5. Hur gör man för att få saker att ske automatiskt, till exempel ta bort gamla meddelanden, radera användare som är inaktiva och sådana saker. Jag löste det genom att dessa saker skedde så fort någon loggade in, men det blev otroligt långsamt i slutändan. Det måste finnas ett bättre sätt, men vad?

 

6. Använder ASPUpload och ASPJpeg för bilder. Vilket är det bästa sättet att begränsa bildernas storlek, både på bredden och höjden. Fixade det på något sätt men det blev mycket kod, långsamt och opålitligt.

 

7. Fler tips om hur man sparar resurser och gör strukturerad kod är förstås mycket välkomna.

 

Tackar alla som svarar varmt på förhand och tillägger att jag säkert kommer på fler frågor senare.

 

 

/ RMK

Jobbiga_färger.

 

Link to comment
Share on other sites

Börjar med att svara på den enklaste frågan (kanske återkommer med svar på de andra om jag har tid/får skrivlust :)

1.

dels för att jag hört att MySQL är bättre.
Dagens underdrift! :-D

om jag har förstått det öppnar man ju inte databaserna i ett program, som Access, utan redigerar, skapar och tar bort tabeller genom att skriva SQL-satser i ett ASP-dokument. Rätt?
Nja, du kan ju använda MySQL Administrator http://www.mysql.com/products/administrator

Dessutom finns phpMyAdmin (http://www.phpmyadmin.net), förutsätter att du kan köra PHP på servern, som tillåter webbaserad administration.

 

/Cluster

------------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

------> http://eforum.kicks-ass.net <------

 

[inlägget ändrat 2005-07-22 11:11:26 av Cluster]

Link to comment
Share on other sites

Rest man Klaymen

Men med MySQl Admin skapar man ändå en koppling till databasen på servern/webhotellet va? Det går inte att ladda ner databasen för att redigera den som man kan med access?

 

EDIT: kom på en till fråga

 

8. Jag lägger upp hela rasket på ett webhotell, men kan jag installera mysql på min dator hemma på något vis, så jag slipper ladda upp filerna varje gång jag behöver uppdatera eller testa något?

 

 

/ RMK

Jobbiga_färger.

 

[inlägget ändrat 2005-07-22 11:25:07 av Rest man Klaymen]

Link to comment
Share on other sites

Anjuna Moon

Då går jag på några av de andra punkterna:

 

2).... Behöver man till exempel deklarera variabler innan ett script

Inte i normala fall, såvida du inte vill göra variabeln global. Däremot rekommenderar jag att du i början av alla asp-filer lägger in raden Option Explicit. Med denna påslagen måste du deklarera alla variabler och detta är viktigt för att effektivt kunna debugga sin kod.

 

3) .... vilket är smartast,

Det beror på hur du ska använda resultatet. Däremot är nästlade databasanrop det sämsta alternativet. Då är det bättre att hämta data från varje tabell och lagra denna i Dictionary-objekt som du sedan använder i nästlade loopar.

 

Ett annat alternativ är som du sade att använda JOINs för att få in data från samtliga tabeller i varje post.

 

4) Vilket är det bästa sättet att göra ett login-script?....hur ska jag göra rent praktiskt.

Det tar för lång tid att förklara här, det är så många aspekter kring det, inte minst säkerhetsaspekten. Kring detta föreslår jag att du läser igenom allt på denna sida: http://www.swesecure.com/?ID=dc6ea60a-12ae-4e7e-9e9c-59489ccafa90&CP=

 

5. Hur gör man för att få saker att ske automatiskt

Själv använder jag MSSQL som har utmärkta funktioner för detta (schemalagda DTS-paket).

 

Har du egen webbserver kan du schemalägga VBS-script via WSH och AT-kommandot i Windows.

 

Att göra dessa rensningar på sidor som anropas av allmänheten är mindre bra eftersom det slöar ner din sajt.

 

6.. Använder ASPUpload och ASPJpeg för bilder. Vilket är det bästa sättet att begränsa bildernas storlek, både på bredden och höjden. Fixade det på något sätt men det blev mycket kod, långsamt och opålitligt.
Posta gärna din kod så ska vi nog kunna optimera den lite.

 

7. Fler tips om hur man sparar resurser och gör strukturerad kod är förstås mycket välkomna.

- Utnyttja möjligheten att använda klasser i VBScript

- Skriv dina egna komponenter (kräver att du behärskar detta förstås, samt har tillgång till att installera dessa på webbservern)

- Använd Option Explicit för att effektivisera debug-processen

- Använd självförklarande variabelnamn samt använd typ-prefix

- Läs all säkerhetsinfo på länken tidigare i inlägget, mkt viktigt!

- Lär dig skriva optimala sql-frågor. (Jag vet inte om MySql Admin har någon query analyzer som MSSQL har)

- Använd med fördel Recordset:s GetRows()-metod, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthgetrows.asp

 

Det var lite till att börja med. Såg nu dock ditt andra inlägg och ser att du inte har tillgång till egen webbserver så några av mina svar är irrelevanta.

 

Link to comment
Share on other sites

Men med MySQl Admin skapar man ändå en koppling till databasen på servern/webhotellet va?
Ja den kopplar upp sig mot din databas (lokalt eller på en remote-server).

Det går inte att ladda ner databasen för att redigera den som man kan med access?
Du behöver inte hålla på och ladda upp och ner filer när du jobbar med en "riktig" databas. Du administrerar och manipulerar databasen (rättigheter, tabeller etc) via MySQL Administrator, phpMyAdmin eller direkt med SQL-anrop från din ASP kod.

 

/Cluster

------------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

------> http://eforum.kicks-ass.net <------

 

Link to comment
Share on other sites

Rest man Klaymen
Själv använder jag MSSQL som har utmärkta funktioner för detta (schemalagda DTS-paket).

 

Har du egen webbserver kan du schemalägga VBS-script via WSH och AT-kommandot i Windows.

 

Att göra dessa rensningar på sidor som anropas av allmänheten är mindre bra eftersom det slöar ner din sajt.

 

ja det märkte jag också :P

 

men om jag inte har egen webserver går det alltså inte? Jag får fråga webhotellet vad dom säger

 

 

 

Posta gärna din kod så ska vi nog kunna optimera den lite.

 

ska jag göra när jag kommer hem, förmodligen i morgon

 

Använd Option Explicit för att effektivisera debug-processen

 

hur fungerar detta? och hur effektiviserar det?

 

kom dessutom på en till fråga

 

9. Regular Expressions är att föredra framför massa Replace-satser va? Inte bara i fråga om funktionalitet och enkelhet men även i fråga om snabbhet och resurser?

 

 

/ RMK

Jobbiga_färger.

 

Link to comment
Share on other sites

Anjuna Moon
hur fungerar detta? och hur effektiviserar det?

Med Option Explicit påslaget så kan du inte använda variabler om de inte är deklarerade. Ett klassiskt problem vid felsökningen undgår du då, det där du har stavat ett variabelnamn fel. Normalt kommer inte parsern att klaga över detta vilket gör felsökningen väldigt jobbig. Med felsökning i ett sådant fall menar jag när scriptet fungerar men ger märkliga och felaktiga resultat. Ett kort och meningslöst exempel som illustrerar detta:

 

x=10
dx=2
[color="#0000ff"]For[/color] i=1 [color="#0000ff"]To[/color] 10
x=x+dx
[color="#0000ff"]Next[/color]
[b]Response[/b].write x [color="#006400"]' GER RESULTATET 30[/color]

 

Stavar du variabeln dx fel i ex. loopen kommer du att få ett annat och felaktigt resultat

 

x=10
dx=2
[color="#0000ff"]For[/color] i=1 [color="#0000ff"]To[/color] 10
x=x+dz
[color="#0000ff"]Next[/color]
[b]Response[/b].write x [color="#006400"]' GER RESULTATET 10[/color]

 

Med Option Explicit påslaget kommer parsern i det andra fallet att ge ett felmeddelande om att dz inte är deklarerat. Då har du direkt hittat felet. Utan detta kommer du i värsta fall få sitta väldigt länge för att hitta ett sådant fel.

 

9. Regular Expressions är att föredra framför massa Replace-satser va? Inte bara i fråga om funktionalitet och enkelhet men även i fråga om snabbhet och resurser?

Ja,jag anser det iallafall, när det handlar om komplicerade ersättningar. För en enkel ersättning som kan göras med enbart en Replace så är detta dock att rekommendera.

 

Link to comment
Share on other sites

Rest man Klaymen
Ja,jag anser det iallafall, när det handlar om komplicerade ersättningar. För en enkel ersättning som kan göras med enbart en Replace så är detta dock att rekommendera.

 

frågan är vilket som går snabbast, till exempel om man ska ersätta en snutt [bild]bildfilen[/bild] till <img src="sökväg/bildfilen.jpg"> om man ska göra det med nästlade replacefunktioner eller en regexp?

 

 

/ RMK

Jobbiga_färger.

 

Link to comment
Share on other sites

Anjuna Moon

Du kan ju testa genom att ta tid på en loop av ex. 100 ersättningar med respektive metod. Använd Response.Write Timer före och efter respektive loop för att se vilken som tar längst tid.

 

Link to comment
Share on other sites

Rest man Klaymen

bra förslag! har jag inte tänkt på, detta kan ju även testas på andra funktioner

 

poäng för det!

 

 

/ RMK

Jobbiga_färger.

 

Link to comment
Share on other sites

Rest man Klaymen
"4) Vilket är det bästa sättet att göra ett login-script?....hur ska jag göra rent praktiskt."

 

Det tar för lång tid att förklara här, det är så många aspekter kring det, inte minst säkerhetsaspekten.

 

Behöver inte en fullständig förklaring med kod och allt, bara lite riktlinjer för vilket som är det snabbaste och enklaste sättet. Säkerheten är inte en superprioriterad fråga, eftersom det inte finns någon hemlig information på sidan, och jag ska uppmana folk att inte använda lösenord som de använder på viktiga sidor, men det är klart, det vore skönt att skydda sig mot spamming och dylikt

 

EDIT: är inte dolda formulär ett alternativ?.. visst man kan visa källa men det går ju att läsa sessions också... slipper ju massa SSL problem då

 

(läste på länken du skickade, och det verkar som att enda sättet att skydda sig mot automatiserad inloggning är att ha en sån där bild med siffror i som man måste skriva i, och det vill jag ju inte ha på inloggningssidan, möjligtvis på registreringssidan)

 

en fråga till:

 

10. Vilket är mest effektivt, att dela upp olika sidor i olika dokument, eller att ha ett globalt dokument som visar information som hämtas med querystrings eller liknande?

 

 

/ RMK

Jobbiga_färger.

 

[inlägget ändrat 2005-07-22 14:39:09 av Rest man Klaymen]

Link to comment
Share on other sites

Rest man Klaymen
Posta gärna din kod så ska vi nog kunna optimera den lite.

 

OK, det var inte så mycket kod som jag mindes men den fungerar ändå ite riktigt bra... kanske nån har ett bättre förslag?

 

width = File.Imagewidth
height = File.Imageheight

[color="#0000ff"]If[/color] File.Imagewidth > 500 [color="#0000ff"]Then[/color]

width = 500 
height = height * 500 / File.Imagewidth

[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]


[color="#0000ff"]If[/color] height > 600 [color="#0000ff"]Then[/color]

width = width * 600 / height
height = 600

[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

 

EDIT: En liten förklaring på hur jag tänkte

 

först tilldelar jag width och height måtten på bilden

om den är bredare än 500 så sätter jag bredden till 500 och sedan höjden till höjden * bredden(500)/Ursprungliga bredden, detta för att höjden och bredden ska förminskas lika mycket.

Sedan samma sak om höjden fortfarande är mer än 600, fast tvärtom förstås

 

sedan tilldelar jag filen måtten width och height (fast det kom inte med här)

 

 

 

 

/ RMK

Jobbiga_färger.

 

[inlägget ändrat 2005-07-23 15:14:03 av Rest man Klaymen]

[inlägget ändrat 2005-07-23 15:21:49 av Rest man Klaymen]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...