Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Fier
  • Eticheta de script are atributele async și defer. Diferența dintre asincron și defer în eticheta de script

Eticheta de script are atributele async și defer. Diferența dintre asincron și defer în eticheta de script

Există o cale de ieșire: puneți liniile Java la sfârșitul documentului html (prin urmare, acestea vor fi încărcate după ce a fost desenată întreaga pagină) și numai după aceea conținutul blocurilor va fi afișat în locurile potrivite. Se numeste . Toate proiectele serioase de astăzi încearcă să treacă la noua tehnologie de încărcare cât mai repede posibil. În plus, este absolut ușor.

Există mai multe abordări. Voi începe în ordine.

script src = tip = "text / javascript">

Încărcare asincronă a scriptului HTML5

Standardul HTML5 acceptă capacitatea de a încărca scripturi asincron, ceea ce poate accelera semnificativ timpul general de recuperare a paginii. Doar adauga asincron sau amâna.

< script async src= „http://www.site.ru/script.js” tip = "text / javascript">

< script defer src= „http://www.site.ru/script.js” tip = "text / javascript">

Cum diferă atributele async și defer

În ambele cazuri, obținem încărcare asincronă a scripturilor. Singura diferență este momentul în care începe executarea scriptului. Script cu atribut asincron va fi executat cât mai curând posibil după ce este încărcat complet, dar înainte ca obiectul fereastră să fie încărcat. În cazul utilizării atributului amâna- scriptul nu va rupe ordinea execuției sale în raport cu alte scripturi și execuția lui va avea loc după ce pagina este complet încărcată și analizată, dar înainte de evenimentul DOMContentLoaded al obiectului document.

Din păcate, acest mecanism nu funcționează în prezent în toate browserele (în special IE). De asemenea, nu va funcționa dacă se află în fișier script.js sunt linii document.scrie.

Încărcare asincronă script javascript de la google

După cum știu toți artizanii, Google acordă o atenție deosebită vitezei de încărcare a site-urilor și le reduce pe cele lente în rezultatele căutării. Pentru a ajuta, Google a dezvoltat un script special cu care puteți face încărcare asincronă a javascriptului.

Pentru a utiliza, trebuie doar să înlocuiți

În cele mai vechi versiuni de IE (6 și mai jos), încărcarea asincronă nu funcționează, din păcate, dar practic nu există astfel de utilizatori. Toate celelalte browsere și servicii folosesc cu succes încărcarea accelerată modernă a paginilor web.

Scripturile sincrone sunt proaste, forțează browserul să blocheze construcția arborelui DOM: mai întâi trebuie să obțineți scriptul, să îl executați și abia apoi să continuați procesarea restului paginii. Acest lucru cu siguranță nu este o știre pentru tine și motivul pentru care noi, ca evangheliști, am promovat utilizarea scripturilor asincrone. Iată un exemplu simplu:

<script src =>scenariu> <scenariu> var script = document .createElement ("script"); script.src = „http://somehost.com/awesome-widget.js”; document .getElementsByTagName ("cap") .appendChild (script);scenariu>

Care este diferența? În versiunea „rea”, blocăm construcția arborelui DOM, așteptăm până când scriptul este încărcat, executat și abia apoi continuăm să procesăm restul documentului. În al doilea exemplu, începem imediat să executăm un script care creează un element de script care indică o resursă externă, îl adăugăm la document și continuăm procesarea DOM. Distincția este subtilă, dar foarte importantă: scripturile generate dinamic nu blochează.

Deci, e grozav, nu? Scripturile generate dinamic sunt un lucru! Nu asa de repede.

JavaScript încorporat are o capcană mică, dar importantă (și adesea trecută cu vederea): CSSOM îl blochează înainte de a fi executat. De ce? Browserul nu știe ce anume intenționează să facă un astfel de script și, deoarece JavaScript poate manipula proprietățile CSS, blochează și așteaptă în timp ce CSS-ul este analizat și CSSOM-ul este construit. Mai bine să vezi o dată decât să auzi de o sută de ori, luăm în considerare următorul exemplu:

Stai puțin, ce se întâmplă? Ambele scripturi vor fi încărcate în avans și executate la ~ 2,7 secunde după încărcarea paginii. Rețineți că scripturile vor fi încă executate numai după ce CSS-ul este disponibil (~ 2,7 secunde), dar deoarece scripturile sunt deja încărcate când CSSOM-ul devine disponibil, le putem executa imediat, economisind peste o secundă de timp de procesare. Am făcut totul greșit?

Înainte de a răspunde la această întrebare, să ne uităm la un alt exemplu, de data aceasta cu atributul „async”:

<script src = „http://udacity-crp.herokuapp.com/time.js?rtt=1&a” asincron>scenariu> <script src = „http://udacity-crp.herokuapp.com/time.js?rtt=1&b” asincron>scenariu>

Cu atributul asincron prezent, scriptul va fi executat asincron de îndată ce este disponibil. Dacă atributul este absent, ... atunci scriptul este încărcat și executat imediat, înainte de a continua analiza ulterioară a documentului.

Atributul asincron de pe eticheta de script implementează două proprietăți importante: îi spune browserului să nu blocheze construcția DOM sau să blocheze execuția scriptului înainte de construirea CSSOM. Ca urmare, scripturile sunt executate imediat după încărcare (~ 1,6 secunde), fără a aștepta CSSOM. Lista scurtă de rezultate:

Deci, de ce am sugerat până acum să folosim un șablon care folosește scripturi generate dinamic?

Articol original: „Scripturi asincrone” injectate de script considerate dăunătoare Articol citit de: visitorFM, zenwalker, FMRobot

The HTML

Și următoarele exemple arată cum să puneți (un script în linie) în interiorul

Modul de rezervă

Browserele care acceptă valoarea modulului pentru atributul type ignoră orice script cu un atribut nomodule. Acest lucru vă permite să utilizați scripturi de module, oferind, de asemenea, scripturi de rezervă marcate cu nomodule pentru browsere care nu acceptă.

Specificații

Specificație stare Comentarii
Standard de viață HTML
Definitia lui " HTML5 a introdus atributul de script asincron, care ajută la încărcarea fișierelor de script adecvate în paralel pe un alt flux, fără a afecta analiza HTML.

Cu toate acestea, scriptul corespunzător va fi analizat și executat de îndată ce se termină încărcarea, indiferent dacă analiza HTML este completă sau nu, și va face referire la elementul DOM până la acel punct specific.

Aici puteți vedea clar că file2.js a fost încărcat înainte de fișierul HTML. Totuși, în timp ce browserul încărca fișierul2, nu a întrerupt analiza HTML și din această cauză, până la executare, avea un link către substituentul html pentru a injecta conținut dinamic.

Pro: Deoarece scripturile sunt încărcate pe un fir diferit, analiza HTML nu va fi întreruptă și utilizatorul va putea vedea conținutul imediat în loc de un ecran alb alb. Principalul câștig de performanță, adică timpul DOMContentLoaded a scăzut de la 47,68 secunde la doar 21,12 secunde și este de ~ 55% din creștere.

Minusuri:

Secvența de execuție JS nu este păstrată. Este executat în ordinea corectă de încărcare, nu în secvența de script inclusă în HTML. Suport pentru browser - Nu este acceptat pe browserele web mai vechi, adică IE 9 și versiunile anterioare.

Ce se întâmplă dacă JS este încărcat înainte ca elementul DOM să fie disponibil? Va fi generată o eroare.

Notă: plasarea scripturilor cu atributul asincron în partea de jos a secțiunii de corp ar fi inutilă și echivalentă cu Abordarea-2.

Abordarea-4 [folosind atributul Amânare]

Atributul Defer va face ca scriptul să fie executat numai după ce analiza HTML a fost finalizată. Un punct foarte important de reținut aici este că Chrome nu acceptă încă amânarea și nu are niciun efect asupra duratei DOMContentLoaded. Cu toate acestea, execută scripturi la sfârșitul parsării HTML.

Pro:

Secvența de importare a scripturilor este păstrată. Deci, fișierul3.js este executat numai după ce fișierul 1 a terminat de încărcat și executat, chiar dacă fișierul 3 a fost încărcat mai devreme.

Suport browser - are un suport mai bun pentru browser în comparație cu atributul asincron, adică parțial acceptat în IE v6-9

Scripturile pot accesa DOM-ul, deoarece acesta este executat numai după ce HTML-ul complet a fost analizat.

Minusuri:

Inițial, am crezut că amânarea ar fi o alegere mai bună decât asincronizarea, dar mai târziu am constatat că Chrome nu o acceptă încă [versiunea 71.0.3578.98] și nu are niciun efect asupra duratei DOMContentLoaded.

Cu toate acestea, funcționează conform așteptărilor în Firefox, cu îmbunătățiri semnificative de performanță.

concluzii

Este de preferat să plasați etichete de script în secțiunea head cu un atribut asincron pentru bibliotecile terțe care depind de Google Analytics, Google reCAPTCHA sau orice altceva care nu necesită acces DOM, deoarece scripturile corespunzătoare sunt încărcate în paralel, dar executate imediat .

Utilizați defer pentru toate celelalte scripturi încărcate în secțiunea head, deoarece acestea vor fi, de asemenea, încărcate în paralel, dar vor fi executate numai după ce HTML-ul a terminat de analizat și DOM-ul este gata pentru a fi accesat / manipulat.

De asemenea, puteți utiliza combinația de ascultători DOMContentLoaded în interiorul scripturilor asincrone pentru a executa funcționalitatea mai târziu. Vă rugăm să lăsați părerile și concluziile dumneavoastră în comentarii și voi fi bucuros să le discut cu dumneavoastră.


Autorul acestui material este I - Yuri Pakholkov. Ofer servicii de scriere a programelor în Java, C++, C# (precum și consultanță asupra acestora) și creare de site-uri web. Lucrez cu site-uri pe CMS OpenCart, WordPress, ModX și auto-scrise. În plus, lucrez direct cu JavaScript, PHP, CSS, HTML - adică pot să vă modific site-ul sau să vă ajut cu programarea web.

Scripturile plug-in (JavaScript) blochează încărcarea codului HTML. Când browserul (parser-ul) ajunge la etichetă

Top articole similare