Waarom JS script onderin laden?
Ik ben hier in een workshop van een leeraar.
Hij vraagt het zich zelf ook nog af waarom een JS script onderin pas wordt in geladen!
Hebben jullie misschien een idee waarom dat zo is?
Door het onderin te plaatsen wordt eerst de website weergegeven en pas daarna de JS geladen i.p.v. dat de bezoeker dus moet wachten tot JS is geladen en dan pas de website wordt weergegeven.
edit: Met vrij lang bedoel ik geen seconden. Maar voor een website is elke milliseconde belangrijk ;)
Gewijzigd op 11/04/2014 10:29:22 door Michael -
Thx Michael helemaal super de klas heeft er ook wat aan gehad:D
Dat kan beide toch niet plaatsvinden voordat de pagina geladen is.
Achteraf js toevoegen is dus niet zo'n gekke gedachte.
Dat is maar de helft van het verhaal. De andere helft (en wat mij betreft het belangrijkere deel) is dat javascript events tijdens het laden worden gebonden aan de elementen op de pagina. Als je javascript bovenin laadt heb je de kans dat de events gebonden moeten worden aan elementen die op dat moment nog helemaal niet bestaan. In dat geval worden die events dus helemaal niet gebonden, ook niet later. Een oplossing voor dit probleem is te wachten, in javascript, totdat het hele document geladen is en dan pas de events te binden. De andere oplossing is om javascript niet bovenin, maar onderin het document te laden. In dat geval weet je zeker dat alle HTML elementen al bestaan en dus alles correct gebonden zal worden.
Erwin H op 11/04/2014 11:09:30:
Als je javascript bovenin laadt heb je de kans dat de events gebonden moeten worden aan elementen die op dat moment nog helemaal niet bestaan. In dat geval worden die events dus helemaal niet gebonden, ook niet later.
Daarmee houden browsers vaak wel rekening. Helaas, moet we daaraan toevoegen, want ze omzeilen dit probleem met deferred rendering: de weergave van alles na de <script>-tag wordt geblokkeerd totdat het externe JavaScript-bestand geheel is geladen.
Bovendien stappen browsers vaak tijdelijk af van het gebruik van meerdere concurrent connections: ze laden de externe JavaScript-bestanden één voor één na elkaar in de opgegeven volgorde, omdat een script voor ander script nodig kan zijn.
Merk overigens op dat dit niet voor elke javascript geldt. Als je bijv. een JS script hebt die custom fonts laad, wil je meteen beschikbaar hebben. Anders zie je een lettertype verandering: Eerst zie je het default lettertype en pas als JS geladen is het custom lettertype
Wouter J op 11/04/2014 12:17:22:
Merk overigens op dat dit niet voor elke javascript geldt. Als je bijv. een JS script hebt die custom fonts laad, wil je meteen beschikbaar hebben. Anders zie je een lettertype verandering: Eerst zie je het default lettertype en pas als JS geladen is het custom lettertype
Dankje dat vindt ik hele goeie. Die zal ik zeker maandag nog vertellen.
Ook het tegenovergestelde is bedenkbaar. Een google analytics script wil je bijv. altijd onderin plaatsen. En dat komt niet door eerder genoemde redenen, maar door het verkregen van betere data. Zodra het in de head staat wordt hij geladen voordat de pagina zichtbaar is. Dan wordt dus elke bezoeker geteld, zelfs als je de site al wegklikt voordat hij geladen is. Wanneer je je google analytics script onderin plaatst worden alleen bezoekers geteld die ook echt de geladen site hebben gezien.
Wouter J op 11/04/2014 23:08:59:
Ook het tegenovergestelde is bedenkbaar. Een google analytics script wil je bijv. altijd onderin plaatsen. En dat komt niet door eerder genoemde redenen, maar door het verkregen van betere data. Zodra het in de head staat wordt hij geladen voordat de pagina zichtbaar is. Dan wordt dus elke bezoeker geteld, zelfs als je de site al wegklikt voordat hij geladen is. Wanneer je je google analytics script onderin plaatst worden alleen bezoekers geteld die ook echt de geladen site hebben gezien.
zeker eeen goede