Just nu i M3-nätverket
Gå till innehåll

Övergripande


jan-erik

Rekommendera Poster

Här kommer ännu fler frågor av mera övergripande natur:

Kanske kan det tyckas att svaren är självklara, men ha i åtanke att jag programmerade Cobol, Algol, Fortran, RPG långt innan de flesta av er var födda, därför har jag ett "seriellt" tänkande som det är svårt att komma runt.

 

fråga 1:

Är det så att innan en sida skickas från servern så görs allting klart? Om jag xvis på en sida har en del med bilder(A), en del med text(B), och en del med utdata från databasläsning© så görs allt detta klart innan det skickas?

En konsekvens av detta skulle då vara att det inte spelar någon roll var i scriptet som xvis databasläsningen sker.

 

fråga 2:

Om avsnitt C består av relativt stora mängder data hämtade från flera mysql-tabeller med ganska komplicerade urval så kommer C att fördröja hela sidans laddning, om svaret på fråga 1 är "ja".

Detta är ju retsamt, särskilt med tanke på att infot i tabellerna ändras relativt sällan,5-10 ggr/dygn.

 

fråga 3:

Vilken teknik skulle man kunna använda för att lösa detta?

 

Ett tänk vore att inte läsa tabellerna varje gång, utan spara infot i någon form av variabler. En sorts buffring, alltså. Varje uppdatering av en tabell skulle kunna trigga att inläsning sker. Det skulle förstås bli en förfärlig massa variabler, fast å andra sidan skulle man väl kunna spara ganska stora sjok som variabler.

 

Vad jag förstår är även Ajax ett sätt att lösa ett sånt problem. Jag kan inte ett dugg om Ajax, är det så att man kan tillämpa ajaxteknik på vissa delar av sidan?

 

Finns det andra Tänk ?

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Är det så att innan en sida skickas från servern så görs allting klart?
Inte nödvändigtvis. I åtminstone PHP kan man skicka utdata under hela skriptets körning. Men det är inte ovanligt att man väntar med att skicka utdata efter att alla datainhämtningar och all logik har körts.

 

Om jag xvis på en sida har en del med bilder(A), en del med text(B), och en del med utdata från databasläsning© så görs allt detta klart innan det skickas?
Om du inte har bilder som genereras för varje sidvisning (vilket kan bli ganska tungt), så är bilderna statiska filer som du inte behöver tänka så mycket på. Bilderna hämtas av webbläsaren när den hittar en img-tagg i html-koden, eller att nån bild finns angiven som bakgrund.

 

Vilken teknik skulle man kunna använda för att lösa detta?
Om du har tunga SQL-frågor finns det väl ett par olika sätt att lösa det. Du kan kika på om det går att optimera tabellstrukturen och/eller SQL-frågan.

 

Den andra variant är att, som du beskriver, använda nån form av cachening. Det går ju t ex att ha en tabell där du lagrar exakt de data du använder och bara plocka därifrån direkt, utan en massa komplicerade uttryck. En annan variant är att dumpa till en fil -- framförallt om det du mellanlagrar är t ex färdig HTML-kod.

 

För de flesta webbspråk bör du kunna hitta färdiga lösningar för olika varianger av cachening.

 

Men, det känns som att det är alldeles för tidigt att börja fundera på optimeringar innan du vet säkert att du får prestandaproblem. Som Donald Knuth sa, "Premature optimization is the root of all evil".

 

Länk till kommentar
Dela på andra webbplatser

Tack Zeblatt.

ja, det är klart att man inte ska till extraordinära grejor om man inte behöver det, men jag är lite mera ute efter principerna.

Du kommenterade inget om ajax. om jag förstått det hela rätt så är det av bl a precis "mina" skäl som man tar till ajax?

Om jag förstod dej rätt:

Jag läser data från 8 olika mysql-tabeller, några av dom ganska omfattande, men med ett begränsat urval. Detta resulterar i 4 st små fönster hos användaren. jag använder php som scriptspråk.

All denna läsning sker ju varje gång sidan laddas, även om submitten inte har med just dessa fönster att göra, utan kan vara xvis att uppdatera en nyhetsruta.

Jag har mätt tiden det tar att läsa/lägga ut dessa fönster, och det hamnar på drygt två sekunder, vilket ju är lite 80-tal.

Då borde man ju kunna tänka sig att det "i bakgrunden" ur dessa 8 tabeller skapas en "summatabell" som sedan används för att lägga ut infot. Då kommer ju allt urval redan vara klart, och endast formatering återstår.

Uppdatreingen av summatabellen kunde ju triggas så snart en uppdatering av någon tabell skett. det vore ju mumma om det i mysql fanns en form av "event handler" som automatiskt fixade detta, men det finas nog inte, eller hur?

 

Är det nåt sånt du tänkt dej, Zerblatt?

 

 

 

Länk till kommentar
Dela på andra webbplatser

Tänkte bara inflika med en liten kommentar om optimering.

 

"Premature optimization" ska alltid gå hand i hand med "premature pessimization".

 

Vissa saker "ska" man bara göra på "rätt" sätt, det är inte fråga om optimering att ta reda på hur en sak "ska" göras, oavsett om det orsakar prestandaproblem eller inte.

 

Länk till kommentar
Dela på andra webbplatser

Jag har mätt tiden det tar att läsa/lägga ut dessa fönster, och det hamnar på drygt två sekunder, vilket ju är lite 80-tal.

 

På 80-talet fanns det ingen www :)

 

Men om det tar 2 sekunder från "klick" tills att sidan är laddad måste det ses som exceptionellt bra. Så man kan vända på det och säga att i den aspekten är det "90-tal" då webbsidor som regel laddade väldigt snabbt (om man bortser från långsamma uppkopplingar förstås) :)

 

[inlägget ändrat 2008-02-20 11:16:45 av lizardKng]

Länk till kommentar
Dela på andra webbplatser

Webbläsare brukar ha lite svårt att visa webbsidor korrekt innan hela sidan är laddad, det är ju först då den har tillgång till all information.

 

Om data ändras sällan kan det definitivt vara idé att cacha detta. I alla fall om man inte redan från början vet att sidan kommer att läsas väldigt sällan.

 

Länk till kommentar
Dela på andra webbplatser

Nä, det är ju sant att det inte fanns web på 80-talet, men kapacitetsproblem är ju inte isolerat till webben. Att med 80-talsteknik försörja ett tillverkande industriföretag med 3-400 order per dag ställde ganska höga krav på smart kodning.

 

Det är ju oxå sant att man ska koda smart från början. Men om man som jag i huvudsak sysslar med web för att jag vill lära mig genom learning-by-doing det så blir det ju en sorts down-top. Det kan ju oxå vara så att omfånget blir större än man räknat med, och att man därför måste byta strategi.

 

Nu har jag i varje fall för för tre av mina "fönster" fixat mellanlagringsfiler, där jag lagrar inte bara data utan även färger, titlar, bildurl, etc. bara att hämta o knuffa ut.

Det hade faktiskt en riktigt god effekt, man kan inte längre se nån fördröjning. Och va enkelt allting blev !

 

nu ska jag bara identifiera de händelser som ska trigga omskapande av mellanfilerna. dessa händelser är alltid knutna till en uppdaring i mysql, men det finns väl ingen funktion där som man kan använda som trigger?

 

[inlägget ändrat 2008-02-20 12:25:28 av jan-erik]

Länk till kommentar
Dela på andra webbplatser

Det funkar alldeles utmärkt med "mellanlagring". Vore inte nästa naturliga steg att man skapar en xml-fil i stället, så att man slipper uppkopplingen till mysql ? Om så, var hittar man begriplig info om hur man skapar xml ur mysql?

 

Länk till kommentar
Dela på andra webbplatser

Det funkar alldeles utmärkt med "mellanlagring". Vore inte nästa naturliga steg att man skapar en xml-fil i stället, så att man slipper uppkopplingen till mysql ? Om så, var hittar man begriplig info om hur man skapar xml ur mysql?

 

Jag har gjort en sådan lösning. Logiken var att så fort data i datbasen ändrades (gjordes av administratörer) så uppdaterades en XML fil.

 

Genom PHP så parsade jag XML filen och skickade ut datan. Min databas var riktigt glad för det. Allt fungerade utmärkt.

 

//MVH Mindsleep

 

I am who i am, you are who you are, i respect that

 

Länk till kommentar
Dela på andra webbplatser

Va bra, då kan du allt om detta!

Frågor:

Hur triggar du uppdateringen av xml? Eller görs även det av administratörer? Det borde kunna ske helautomatiskt.

Jag har funderat på att försöka använda den totala storleken av en tabell som trigger, eller möjligen antalet records, men det blir ju då med vissa intervall, och det är ju inte riktigt så man vill ha det. Och för övrigt kan man ju då lika gärna köra uppdat direkt.

 

Vad använder du för mjukvara för att skapa xml ur mysql?

 

Länk till kommentar
Dela på andra webbplatser

Eftersom du vet själv när ändringar sker i databasen (det är väl din kod?) så vet du ju också när cachade data inte längre gäller. Markera dessa som "ogiltiga".

 

När du sedan läser cachat data som är markerat som ogiltigt får du gå via databasen och rekonstruera datat.

 

Eller uppdateras databasen utanför din kontroll?

 

Länk till kommentar
Dela på andra webbplatser

Vad använder du för mjukvara för att skapa xml ur mysql?

 

Jag skapade min egen xml fil.

 

Det finns säkerligen smartare sätt att lösa det på. Men för mig fungerade det helt perfekt. Jag löste det genom att så fort en administratör lade in data i en speciell tabell så uppdaterades XML filen igenom att skapa en hel ny så att den hela tiden innehöll de 50 senaste posterna från Db´n.

 

Det hela sköttes via koden. Inget "fancy pancy". Efter en insert eller update kördes gjorde jag en select...hämta de 50 senaste posterna och parsade ut det i XML filen. En kontroll gjordes på att XML filen var intakt och att ingen data saknades. Snabbt och enkelt.

 

Men du kan säkerligen ha andra egna "triggers". Såsom tabellstorlek i bytes eller poster eller andra värden. Det finns säkerligen en massa hjälp script som kan fixa en xml fil. Men jag tyckte det var enklast och snabbast att göra det på detta sättet.

 

//MVH Mindsleep

 

I am who i am, you are who you are, i respect that

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...