Closed karhatsu closed 13 years ago
Yleisesti ottaen voi nyt todeta, että tuotannon hitaudet kisan aikana johtuivat juuri isojen sarjojen tulossivujen näyttämisestä. Ja oleellista tässä on se, että kyse ei ollut pullonkaulasta tietokannassa vaan yksinkertaisesti erittäin hitaasta series.ordered_competitors-metodista. Siis vaikka käyttäjiä olisi vain yksi kerrallaan, niin isoille sarjoille tuon metodin ajaminen kestää tuotannossa tällä hetkellä yli 5 sekuntia. Toki tämä sitten välillisesti aiheuttaa pullonkaulan jonnekin, vaikkapa tietokantaan.
Olen tutkinut ongelmaa jonkin verran tarkemmin ja päätynyt, että kriittinen metodi on competitor.series_best_time_in_seconds. Tämä metodi katsoo joko ikäryhmän tai koko sarjan parhaan ajan. Optimointi täytyy siis keskittää sen tehostamiseen.
Sain optimoitua Series.best_time_in_seconds-metodia niin, että nyt tuotannossa isoimmat sivut lataantuvat 1,5 sekunnissa. Kehityspuolella parannus oli 4 testin keskiarvossa 13 -> 5,3 sekuntia.
Ainoa ongelma on tällä hetkellä se, että yksikkötestit eivät mene läpi, koska en saanut sqlite3-toteutusta toimimaan vielä. Nyt tuli nimittäin ensimmäistä kertaa vastaan tilanne, jossa joutuu tekemään db-kohtaisia kyselyitä. Repossa ja tuotannossa on siis poikkeuksellisesti koodia, jonka testit eivät mene läpi, mutta yritän korjata ongelman mahdollisimman pian.
Testitkin toimivat. Suljen tämän, vaikka toki sivu voisi olla vieläkin hieman nopeampi. Seuraavat tehostustoimenpiteet voivat kuitenkin olla paljon vaikeampia.
SM-kisojen suurimman sarjan tulossivun näyttäminen tuotannossa kestää 5-10 sekuntia. Vaatii merkittävää lisäoptimointia.