Šiandien susidūriau su vienu <body onload="funkcija()"> trūkumu, nusprendžiau apie jį papasakoti.
Tarkime, turime tinklalapį, kuris užsikrovęs turėtų įvykdyti tam tikrą Javascript kodą, kažką pakeičiantį/pridedantį tam tikroje tinklalapio vietoje. Jei tai bus bandoma daryti anksčiau, negu minėtoji vieta užsikraus, operacija nenusiseks, todėl tipiniu atveju mes pirma užkrauname tinklalapio body, o tada jau su juo žaidžiame. Visa tai realizuojama, pridedant onload="funkcija()" atributą body žymai.
Bet štai ir susiduriame su netikėtumais. Tarkime, svetainė užkrauna skaitliuką iš vieno ar kelių kitų serverių. Tam, kad lankytojui pirmiau parodyti svetainės turinį, o tik tada rūpintis statistikų generavimu, mes tuos JS failus iškviečiame body pabaigoje, o ne head dalyje. Taigi, viskas veikia puikiai, kol vienas iš tų kitų serverių nenumiršta. O kai taip įvyksta, body nėra laikomas loaded, kol neišsibaigia laikas, skirtas bandymui parsisiųsti to skaitliuko JS’ą. Taigi, gaunasi truputėlį nekas — mūsų funkcija inicijuojasi, vėluodama gerą minutę, o gal net daugiau… Beje, šiuo atveju JS įtraukimas į head dalį, spėju, tik dar apsunkintų situaciją — tą minutę vėluotų ne tik mūsų funkcija, bet ir visas svetainės turinys.
Todėl nuo šiol manau, jog labai dažnai vietoje onload geriau naudoti paprastą script, iškviečiamą prieš pat iškviečiant skaitliukus, o gal net ir dar anksčiau. Bent jau tais atvejais, kai kažkokį turinį krauname iš išorinių serverių…
Nuspėjau įrašo pabaigą. Tiksliau norėjau tą patį pasiūlyti. Kaiptik labai neseniai priėjau lygiai tokių pačių išvadų.
Na aš vis vien už onload variantą, tik ne bodžiui, o windowsui:
O js.js:
function do_it() {
//…
}
window.onload = do_it;
Visi kiti variantai labai nešvarūs.
window.onload irgi užteršia kodą.
Plius, lauktum minutę, kol išsibaigtų laikas, skirtas ryšiui su statistikų serveriu užmegzti.
O gal geriausia skaitliukus pasigamint patiems ir laikyt savo serveryje/hostinge (liet. priegloboje)?
Serveris irgi lužta, irgi apsikrauna load’ais, todėl visus script ir rekomenduoju dėt tik pačiame gale, prieš </body>.
Nesuprantu tik vieno – kodėl google savo google analytic rekomenduoja dėti iškart po <body>, juk skaitliukas nėra pati svarbiausia informacija, kurią užkrauti būtina pirmiau nei tinklapį – aš jau nekalbu apie tai, kad google analytic gan gerokai stabdo.