Hidracija lene obremenitve in uporabe medsebojno delujeta na zapleten in pogosto nasprotujoči si način, predvsem zato, ker hidracija nestrpno izvaja izvajanje aplikacijske kode, kar spodkopava prednosti lenega nalaganja.
Kako deluje hidracija in njen vpliv na leno nalaganje
Hidracija je postopek, s katerim je stran HTML, ki je bila sprožena strežnika, "aktivirana" na strani odjemalca, tako da zažene JavaScript, da pritrdi poslušalce dogodkov, obnovi stanje komponent in stran postane interaktivna. Ta postopek vključuje izvajanje komponent aplikacije, ki se začnejo iz korena in prečkate po komponentnem drevesu, da bi razumeli stanje, vezi in upravljavcev dogodkov.
Ker mora hidracija obiskati vsako komponento v trenutnem drevesu upodabljanja, da ugotovi, ali je treba biti interaktiven, prisili vse te komponente, ki jih je treba naložiti in izvajati nestrpno. To pomeni, da tudi če označite nekaj komponent za leno obremenitev, bo hidracija še vedno povzročila, da se takoj naložijo, če so del začetnega drevesa upodabljanja. Hidracija je zaporedna in ne more preskočiti vmesnih komponent na neposredno hidriranje otroških komponent, zato je treba vse matične komponente najprej hidrirati [1] [6].
Zakaj hidratacija sabotaže leno nalaganje
- Želena izvedba: Hidracija zahteva izvedbo vseh komponent v drevesu upodabljanja, kar preprečuje, da bi leno nalaganje odložilo nalaganje kode za te komponente.
- Odvisnosti komponent: Otroške komponente so odvisne od rekvizitov iz matičnih komponent, zato morajo biti starši najprej hidrirani in prisilijo verigo željnega obremenitve.
- Handlers and State: Hidracija mora nastaviti tudi poslušalce dogodkov in obnovitev stanja, ki zahteva vnaprej izvajanje kode komponent.
- Breme razvijalcev: Da bi dosegli leno obremenitev med hidracijo, morajo razvijalci ročno upravljati prednastavitve in cepljenje kode, kar je lahko zapleteno in nagnjeno k napakam [6] [7].
Ko leno nalaganje deluje kljub hidraciji
Lena obremenitev je še vedno lahko učinkovita za komponente, ki niso del začetnega drevesa upodabljanja in jih med hidracijo ne obiskujejo. Primeri vključujejo:
- Dialogi ali modali, ki se odprejo pri interakciji uporabnikov
- komponente na različnih poteh, ki na začetku niso upodobljene
V teh primerih so komponente lahko resnično leno naložene, ker hidracija ne prisili njihove takojšnje izvedbe [6].
Tehnike za optimizacijo hidratacije in lenega nalaganja
Nekateri sodobni okviri in knjižnice poskušajo optimizirati to interakcijo z izvajanjem lene hidratacije ali selektivne hidracije, kjer so komponente hidrirane le, kadar je to potrebno, na primer, ko postanejo vidne v pogledu:
-Knjižnice, kot je "naslednja lena-hidracija na Scroll" v Next.js, omogočajo, da se hidracija odloži, dokler se komponenta ne popije v ogled.
- Z uporabo API -ja IntersectionObServer lahko komponente leno naložijo in hidrirajo le, ko vstopijo v vidno polje.
-V VUE/NUXT-u, lene hidratacijske tehnike in vtičniki (npr. "Nuxt-lani-hidrate`) omogočajo, da se hidracija zavleče, dokler glavna nit ni v prostem teku ali je komponenta vidna, izboljšuje čas za interaktivne in prve metrike vhodne zamude [4] [5].
Povzetek
Hidracija in lena obremenitev sta v bistvu v nasprotju, ker hidracija zahteva željno izvajanje komponent v drevesu upodabljanja, kar preprečuje, da bi leno obremenitev odložila izvedbo kode. Vendar pa lena obremenitev ostaja učinkovita za komponente zunaj začetnega obsega hidratacije. Nastajajoče tehnike, kot je lena hidracija, je cilj uskladiti ta konflikt z odložitvijo same hidracije, izboljšanjem zmogljivosti in uporabniške izkušnje.
V bistvu hidracija sabotira leno obremenitev med začetno obremenitvijo strani, vendar lahko s skrbnimi arhitekturnimi izbirami in specializiranimi orodji razvijalci optimizirajo, kdaj in kako so komponente hidrirane, da si povrnejo prednosti lenega nalaganja [1] [6] [7].
Navedbe:
[1] https://www.infoq.com/presentions/hydracija-lazy-loading/
[2] https://qconsf.com/presentation/oct2023/hydracija-and-lazy-loading-are-inkompatibilna
[3] https://github.com/vercel/next.js/discussions/29751
[4] https://www.wisp.blog/blog/lazy-loading-in-nextjs-the-future-oof-resource-Optimizacija
[5] https://vueschool.io/articles/vuejs-tutorials/lazy-hydracija-and-server-components-in-nuxt-Vue-js-3-performance/
[6] https://www.builder.io/blog/hydracija-sabotages-laz -w-oading
[7] https://www.linkedin.com/posts/misko-hevery-3883b1_lazy-loading-is-like-exerce-everyone-says-activity-71150869393935984641-5OXK
[8] https://www.techtarget.com/searchsoftwarequality/definition/lazy-loading