( asch | 2022. 08. 16., k – 18:11 )

Hopp, észre sem vettem, hogy ezek is gyorsabbak lettek.

A rockerben ez a feature a killer teljesítmény szempontból szerintem: https://github.com/fizzed/rocker#near-zero-copy-rendering A konstans template stringek újrakódolása UTF-8-ba minden kérésre az ami talán a legtöbb CPU-t viszi és tökéletesen felesleges munka, minden alkalommal garantáltan ugyanazt az eredményt kell adnia.

Az rtemplate logikáján belül nem lehet megcsinálni, az egyszerűséget fel kellene áldozni ennek az oltárán, és az már egy másik eszköz volna, ha beletenném ezt a feature-t. Pont ez az egyik feature, amire azt írtam, hogy vannak még ötleteim hogy hogyan lehet Java-n belül gyorsabbat csinálni... Most nincs nálam a másik gépem amin mértem, de majd lefuttatok erre is több mérést kontra rtemplate, mert kiváncsi vagyok.

Ha már nekiállnék egy új template nyelvnek, akkor eleve olyanra csinálnám meg, hogy korutinként is futtatható legyen a template runtime, mert egyébként a nagyteljesítményű webszerverek problémája már sokkal inkább a sok kontextusváltás, mint bármi más, és NIO szerverrel CPU magonként 1 szálon lehetne a leghatékonyabb kiszolgálást megvalósítani. Még az is lehet, hogy erre a projektre saját HTTP szervert is írni kellene... De sajnos még sosem jött szembe olyan feladat, ahol ennek értelme volna, úgyhogy eddig csak álmodoztam ilyenről.

 

A trimou sajnos annyira nem jól dokumentált, hogy ránézésre meg lehetne mondani, hogy mitől tud gyorsabb lenni, bele kellene ásnom magam, és arra is kellene több mérést futtatnom.

 

Szerk.: Ismételt futtatások 100.000 ismétléssel, még mindig az rtemplate a nyerő:

$ ./runtests.sh localhost
rocker Time taken for tests: 6.350 seconds
rtemplate Time taken for tests: 5.938 seconds
trimou Time taken for tests: 6.522 seconds
rocker Time taken for tests: 6.384 seconds
rtemplate Time taken for tests: 5.946 seconds
trimou Time taken for tests: 6.504 seconds
rocker Time taken for tests: 6.382 seconds
rtemplate Time taken for tests: 6.035 seconds
trimou Time taken for tests: 6.716 seconds
apr_socket_recv: Connection reset by peer (104)
rocker
rtemplate Time taken for tests: 5.984 seconds
trimou Time taken for tests: 6.650 seconds
rocker Time taken for tests: 6.360 seconds
rtemplate Time taken for tests: 5.984 seconds
trimou Time taken for tests: 6.833 seconds

De! Belenéztem a benchmark kódokba, és a rocker példakódja nagyon gyengén van implementálva, mert ugye a rocker nyilván csak bináris kimenet esetén tudja a linkelt killer optimalizációját, a beillesztése pedig nem úgy van megvalósítva sajnos. Ezt javítani kellene, hogy igazságos legyen az összehasonlítás.