Prestandaförbättringar trådlistningar
Vi har skrivit om koden för hur trådlistningar fungerar vilket innebär en prestandaförbättring på 10-15 gånger jämfört med tidigare. Bland annat startsidan laddas nu momentant, vilket får ses som positivt för både besökare och serverbelastning.
Vad trevligt!
Bara tvungen att dela mina fina excel-grafer =D
Kategorisidorna är 450% snabbare och startsidan 1366% snabbare
Det tog just 45 varv på spinnern uppe i hörnet att uppdatera förstasidan. Momentant?
Nej det låter inte momentant, men kvarstår problemet?
macson skrev:Bara tvungen att dela mina fina excel-grafer =D
Kategorisidorna är 450% snabbare och startsidan 1366% snabbare
PM-sidan är inte uppdaterad va? Den tog precis 11 sekunder att öppna. Men startsidan och kategorierna går supersnabbt nu!
Det stämmer att PM sidan är inte åtgärdad.
Oj, oj, oj, trevligt, trevligt, trevligt
Fortfarande jätteseeeeeeegt ibland, men blixtsnabbt andra gånger.
Låter mystiskt Smaragdalenda, någon annan som upplever att det ibland går långsamt?
Finns ju tyvärr en del spökerier som försegår för er användare som har 10000+ poäng...
Det brukar stå och tugga och meddelar "Väntar på www.pluggakuten.se..." men nu står det och tuggar på "Ansluter..."
Hmm, låter som det kan vara ett problem med internetanslutningen möjligtvis.
Smaragdalena skrev:Fortfarande jätteseeeeeeegt ibland, men blixtsnabbt andra gånger.
Det vore intressant att veta vilken sida du laddar när den ”tuggar”, startsidan eller någon av kategorisidorna? Denna uppdatering har endast påverkat dessa sidor, övriga saker som att posta trådar, PM osv är oförändrade.
Idag fick jag försöka 30 (ja, trettio) gånger innan det gick att ladda upp bilden i det här inlägget.
Aj aj, något som inte står rätt till där, förstår din frustration!
Men som sagt det är inte det vi åtgärdat i den här prestandaförbättringen, enbart listningar av inlägg. Vi har kommunicerat med Mattecentrum om att lösa fler prestandaproblem och buggar, förhoppningsvis får vi möjlighet att göra det inom inte allt för lång framtid.
Jag som nyligen gått en progeammeringskurs vill väldigt gärna (försöka) veta lite mer tekniskt, vad är det ni har ändrat egentligen?
Syftar "tråd" i "trådlistningar" på det vi kallar trådar i pluggakuten eller nåt annat?
Qetsiyah skrev:Jag som nyligen gått en progeammeringskurs vill väldigt gärna (försöka) veta lite mer tekniskt, vad är det ni har ändrat egentligen?
Syftar "tråd" i "trådlistningar" på det vi kallar trådar i pluggakuten eller nåt annat?
Det här är en trådlistning:
Jag kan förklara lite kort så får du Goola på de saker som du inte förstår =D
Pluggakutens datalager är byggt med en ORM-mapper som heter Entity Framework. Den mappar tabeller i databasen mot objekt i minnet. Den är fin osv. och Microsoft rekommenderar att man använder denna. Den har en väldigt intressant feature som kallas "Lazy Loading", vilket i praktiken innebär att man kan ladda in ett objekt (tänk en tråd), sedan skapas SQL-frågor automatiskt om man skulle använda någon property på tråd-objektet som inte hämtades i den första frågan. Det är extremt enkelt att "skjuta sig i foten" med detta om vilket är anledningen till att tex Entitiy Framework-varianten för .NET Core inte ens har Lazy Loading längre.
Det skapar ett problem som man brukar kalla N+1, dvs för varje rad i resultat tabellen så körs ytterligare en SQL-fråga mot databasen för att hämta "mer information" - detta sker om man inte explicit förladdar den information man vill ha - vilket är lätt att missa.
Ett annat problem med en ORM-mapper när den används på det sätt den gör på många ställen på PA är att den hämtar en massa information som den inte behöver. Tex för att visa en medlems "username" i en trådlista så hämtades förut all information (ca 25 kolumner) om medlemmen men endast username användes.
Vi har helt enkelt optimerat SQL-frågorna, adderat saknade index i databasen och "brutit ut" denna typ av "read only"-läsningar till en egen typ av "Query"-objekt som är supereffektivt och kringgår Entity Framwork för att få så hög prestanda som möjligt - man brukar prata om en arkitektur som kallas CQRS, dvs att man separerar logiken för Commands (tex skapa/uppdatera) från Queries (tex. ge mig alla trådar som matchar x och y). Med denna separation kan man ha en rik domänmodel för sina Commands och en snabbt och tunt lager för att läsa. Utöver detta har vi också utökat användningen av applikationens cache, tex så kördes det tidigare en SQL-fråga på varje sidladdning som hämtade "globala inställningar" som ändras kanske max en gång i veckan. Denna typ av objekt har vi placerat i en cache för att slippa gå mot databasen och hämta samma information om och om igen, samma sak med menyn till höger som inte heller ändras så ofta.
Oj, komplicerat, men tack!