<body onload="funkcija()"> minusas

Š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ų…

5 komentarai apie “<body onload="funkcija()"> minusas

  1. Nuspėjau įrašo pabaigą. Tiksliau norėjau tą patį pasiūlyti. Kaiptik labai neseniai priėjau lygiai tokių pačių išvadų. :-)

  2. 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.

  3. window.onload irgi užteršia kodą. :) Plius, lauktum minutę, kol išsibaigtų laikas, skirtas ryšiui su statistikų serveriu užmegzti.

  4. O gal geriausia skaitliukus pasigamint patiems ir laikyt savo serveryje/hostinge (liet. priegloboje)?

  5. 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.

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *