script-uri externe, ordinea de execuție

Acest comportament se numește „sincron“. De regulă, este destul de normal, dar există un corolar important.

Dacă scriptul - extern, că în timp ce browser-ul nu va executa, nu se va afișa partea de dedesubt a paginii.







Aceasta este, într-un astfel de document, până când acesta este încărcat și executat big.js. conținut Acesta va fi ascuns:

Și aici, întrebarea - ne dorim cu adevărat? Adică, dacă restul paginii nu poate fi afișată înainte de a încărca script-ul?

Există situații în care noi nu pur și simplu nu doresc o întârziere, dar este chiar periculos.

Și dacă serverul pentru a încărca script-ul extern este supraîncărcat? Vizitatorul în acest caz, poate fi de așteptare un timp foarte lung!

Aici este un exemplu, cu un scenariu asemănător (în valoare de o întârziere artificială pentru a descărca):

Puteți pune toate aceste script-uri în partea de jos a paginii - aceasta va reduce problema, dar nu scapa de ea complet, dacă câteva script-uri. Să presupunem că, la sfârșitul paginii 3 din script-ul, iar primul dintre ele incetineste - se pare, celelalte două vor fi de așteptare - prea rău.

Browser-ul vine, de asemenea, script-uri situate în partea de jos a paginii, acestea vor fi încărcate numai atunci când întreaga pagină pentru a încărca. Și nu este întotdeauna corectă. De exemplu, contorul vizite de lucru mai precise dacă sarcina sa timpurie.

Prin urmare, „pentru a plasa scripturile de mai jos“ - nu cea mai bună soluție.

Pentru a rezolva această problemă în mod fundamental va ajuta la atributele asincronă sau amâna:

Suportat de toate browserele cu excepția IE9-. Script-ul pentru a fi rulat complet asincronă. Asta este, atunci când detectarea



Первое – браузер гарантирует, что относительный порядок скриптов с defer будет сохранён.

То есть, в таком коде (с async ) первым сработает тот скрипт, который раньше загрузится:

А в таком коде (с defer ) первым сработает всегда 1.js. а скрипт 2.js. даже если загрузился раньше, будет его ждать.

Поэтому атрибут defer используют в тех случаях, когда второй скрипт 2.js зависит от первого 1.js. к примеру – использует что-то, описанное первым скриптом.

Второе отличие – скрипт с defer сработает, когда весь HTML-документ будет обработан браузером.

Например, если документ достаточно большой…

…То скрипт async.js выполнится, как только загрузится – возможно, до того, как весь документ готов. А defer.js подождёт готовности всего документа.

Это бывает удобно, когда мы в скрипте хотим работать с документом, и должны быть уверены, что он полностью получен.

async вместе с defer

При одновременном указании async и defer в современных браузерах будет использован только async. в IE9- – только defer (не понимает async ).

Атрибуты async/defer – только для внешних скриптов

Атрибуты async/defer работают только в том случае, если назначены на внешние скрипты, т.е. имеющие src .

При попытке назначить их на обычные скрипты . acestea vor fi ignorate.

Același exemplu cu asincronă:

Când porniți veți vedea că întreaga pagină a fost afișată imediat, și de alertă de la un script extern va apărea mai târziu, atunci când este încărcat script-ul.

Aceste atribute sunt pentru o lungă perioadă de timp „pentru a merge“

Înainte de a introduce tag-ul extern

  • Atributele speciale și async Amânați utilizate pentru a până la încărcarea script extern - browser-ul pentru a afișa restul (acesta urmând) a paginii. Fără ei, acest lucru nu se întâmplă.
  • Diferența dintre asincronă și Suspendați. amâna atribut reține secvența relativă de script-uri și asincronă - nr. În plus, Amânați așteaptă întotdeauna până când întregul HTML documentul va fi gata, și asincronă - nr.
  • Rezolva puzzle-uri pentru a vă asigura că ați înțeles totul corect.