Az ASP.NET-ben megjelent ListView vezérlő igazi főnyeremény, tud mindent, amit kell, kézbentartható vele a generált HTML kód, ráadásul van hozzá designer támogatás is a Visual Studioban. Csak éppen vízfejűbb, mint bármely más listás adatmegjelenítő vezérlő.
Történt ugyanis, hogy ma hozzá kellett nyúlnom az egyik webalkalmazásunk egyik ASPX oldalához és ha már ott jártam, kicseréltem egy Repeatert ListViewra. Éljen az új vezérlő, ez a jövő, csak jobb lesz nekünk. Hát nem lett. Igen, tudom, ami működik, azon nem szabad változtatni…
Mivel épp azon dolgoztam, hogy az oldal által generált HTML kód minél egyszerűbb és áttekinthetőbb legyen, ezért hamar feltűnt, hogy bizony megnőtt a ViewState. Nem is kicsit. Ráadásul tette mindezt úgy, hogy az egész oldalra ki van kapcsolva a ViewState: EnableViewState=”false”.
Ez kezdett érdekes lenni, hiszen a funkcionalitás nem változott, még a template sem, csak másik vezérlőbe van beágyazva. Letöltöttem Fritz Onion ViewState Decoderét és megnéztem, mi van benne. A ViewState-ben semmi érdekes, ámde a control state-be, ami szintén az __VIEWSTATE rejtett mezőben utazik, bizony került valami a ListView1-től. A control state pedig akkor is ott van, amikor a ViewState ki van kapcsolva. Ez tehát nem bug, hanem feature!
Ezen a felismerésen fellelkesülve elkezdtem méregetni, hogy a különböző vezérlők hogyan viselkednek. Egy táblából válogattam le 145 rekordot és jelenítettem meg különböző vezérlőkben, miközben mértem az oldal és a ViewState méretét. Íme az eredmény:
| Page size (bytes) | Page ViewState length (character count) |
| EnableViewState = | true | false | true | false |
| ListView | 185 969 | 85 785 | 100 276 | 92 |
| Repeater | 197 324 | 97 176 | 100 200 | 52 |
| DataList | 201 065 | 100 889 | 100 228 | 52 |
| DataList RepeatLayout="Flow" | 200 121 | 99 945 | 100 228 | 52 |
| GridView | 204 048 | 102 868 | 101 256 | 76 |
A táblázatból az látszik, hogy a ListView szemeteli a legnagyobb ViewState-et még akkor is, ha a ViewState egyébként ki van kapcsolva. Az oldalhoz tartozó 52 karakteres alap ViewState majdnem kétszer akkorára növekszik. Mindez persze csak akkor igaz, ha egyetlen ListView van az oldalon, ha több, akkor példányonként további 40 karakter a sallang.
Persze a másik oldalon ott a ListView óriási előnye: a kézbentartható HTML kimenet. Míg a többi vezérlő span és table tag-ekkel tudta csak beágyazni a template-et, a ListView-nak nincs szüksége ilyen körítésre, tehát csak az kerül a HTML kimenetbe, amit mi beleírunk a sablonokba.
Persze, ha a számokat megnézzük, néhány bájtról, esetleg néhány kilóbájtról beszélünk. Vajon számít ez mondjuk havi sávszélesség szintjén? Kliens vagy szerver oldali sebesség szintjén? A megrendelő gurujával való vitatkozásnál, aki szerint csak az a weboldal lehet jó, aminek minden egyes karakterét kézzel írta valaki Notepad-ben vi-ban?
Ti szoktatok erre figyelni?