Tietokannasta hakua muutettiin siten, että nyt kaikki tiedot metatietoja lukuun ottamatta haetaan noin kymmenellä haulla. Kaikki questionresultit ja questionfieldit haetaan kahdella haulla. Myös questionit haetaan yhdellä haulla. Questionasgroupit haetaan kahdella haulla siten, että ensin haetaan kysymysten perusteella viitteet questionasgroupeihin ja sitten yhdellä haulla kaikki questionasgroupit. Tähän asti haku siis tapahtuu "alhaalta ylös", eli hierarkiassa alemmat oliot haetaan ensin ja niiden perusteella alikyselyjen avulla haetaan aina seuraava taso. Questiongroupit kuitenkin haetaan ainakin toistaiseksi kuten ennenkin, eli questionnairen tiedot haetaan ensin ja sitten haetaan sille kuuluvat questiongroupit. Jokainen questiongroup hakee sen jälkeen itsensä. Tämä tuottaa pari turhaa hakua, mutta se ei vaikuta kokonaisuuteen käytännössä mitenkään, joten sitä ei vielä muutettu. Näin päästiin hieman nopeammin näkemään, oliko hakurakenteen muuttamisesta mitään hyötyä.
Testikyselynä oli Santasen arviointikysely (joka on sittemmin mennyt rikki). Vasemmalla on ajon järjestysnumero. Viimeisessä taulukossa on monta ykköstä, koska ne ovat kaikki kääntämisen jälkeen ensimmäisiä ajoja. Seuraavaksi taulukossa on tietokannasta hakevan metodin suoritusaika. Sen jälkeen on HTML-koodin generoivan metodin suoritusaika ja lopuksi Kotka.login kokonaisaika.
Ensin vertailun vuoksi lähtötilanteen ajot:
Ajo
|
getValuesFromDb-metodin
suoritusaika
|
getHtml-metodin
suoritusaika
|
Kotka.login
aika
|
1
|
3380
|
2360
|
5780
|
2
|
2290
|
3630
|
6140
|
3
|
2330
|
2400
|
4900
|
4
|
2380
|
2407
|
5000
|
5
|
2270
|
2488
|
4840
|
6
|
2350
|
2350
|
4910
|
7
|
2410
|
2410
|
5020
|
8
|
2340
|
2360
|
4900
|
9
|
2300
|
2450
|
4940
|
10
|
2310
|
2400
|
4910
|
Seuraavat ajot on tehty uudella tavalla:
Ajo
|
getValuesFromDbQuickly-metodin
suoritusaika
|
getHtml-metodin
suoritusaika
|
Kotka.login
aika
|
1
|
2680
|
2480
|
5350
|
2
|
1570
|
2470
|
4240
|
3
|
1580
|
2500
|
4260
|
4
|
1510
|
2410
|
4120
|
5
|
1430
|
2470
|
4090
|
6
|
1470
|
2480
|
4120
|
7
|
1810
|
2450
|
4450
|
8
|
2640
|
3460
|
6150
|
9
|
1700
|
2440
|
4330
|
10
|
1450
|
2440
|
4080
|
Uusi rakenne kyselyn hakemiseksi siis nopeutti hieman hakua, mutta ei läheskään riittävästi. Tutkailimme hiukan eri palaset hakevien SQL-hakujen kestoa login avulla.
Seuraavana pari ajoa:
Ajo
|
Result-qtime
|
Field-qtime
|
Question-qtime
|
Questionasgroup_question-qtime
|
1
|
258
|
192
|
69
|
51
|
2
|
200
|
199
|
69
|
52
|
3
|
214
|
194
|
83
|
42
|
Seuraavaksi kiinnostuimme siitä, miten ihmeessä HTML-koodin muodostava getHtml-metodi voi viedä niin paljon aikaa kuin mitä testit kertoivat. Tutkailimme rakennetta aikamme ja päädyimme tarkastelemaan villakoiran ydintä, TemplateHandleria. Huomasimme sitä tutkiessamme, että se käy jokaisella kutsulla lukemassa template-tiedoston sisällön tiedostosta muistiinsa. Muutimme luokkaa siten, että nykyisellään se lukee yhdellä kertaa kaikki template-tiedostot HashMap-tietorakenteeseen. Lisäksi HashMap on kaikille yhteinen, joten tiedostosta lukeminen tehdään vain kerran kyselyä käsiteltäessä.
Muutoksen jälkeen HTML-koodin generoiminen alkoi sujumaan jo siedettävää vauhtia. Seuraavana pari testiajoa:
Ajo
|
getValuesFromDbQuickly-metodin
suoritusaika
|
getHtml-metodin
suoritusaika
|
1
|
2800
|
110
|
1
|
2394
|
107
|
1
|
1617
|
105
|
1
|
1551
|
124
|
2
|
1615
|
114
|
3
|
1503
|
101
|
4
|
1500
|
99
|
5
|
1498
|
124
|
6
|
1541
|
105
|
7
|
1549
|
127
|
Tällä hetkellä kyselyn hakeminen tietokannasta ja tulostaminen näyttöön vie siis pari-kolme sekuntia. Tästä tosin vielä puuttuvat erilaiset metatiedot ja pari määritystaulua, joihin tulevat esim. tekstialueiden koot ym. Niiden käsittelyä on vielä hiukan pähkittävä, koska samalla JSP-sivulla harvoin tarvitaan sekä metatietoja, että koko kyselyn näkymää.
Kyselyn tallennuksen nopeutus on vielä edessä.
Muilta osin sovellus on edennyt siten, että vastausten selailu on nyt mahdollista. Lisäksi main-sivulle on tehty lista kyseisen käyttäjän tekemistä kyselyistä. Kyseisestä listasta voi valita mieleisensä kyselyn ja mennä selailemaan sen vastauksia yksi kerrallaan.
Lisäksi handler-sivujen päivitysongelma on korjattu. Aikaisemmin ongelmana oli, etteivät sivut päivittyneet kun niille meni uudelleen, vaan tiedot pysyivät samana.
Esikatselu on saatu valmiiksi ja lisätty kaikille luomisvaiheen sivuille.
Ensimmäinen versio tyylilomakkeesta on toteutettu.
WWW-osoitteiden syöttöominaisuus kysymyksille on toteutettu välilehtiominaisuuden avulla. Muuten välilehtien tekeminen on vielä aika paljon kesken.