Sobes.tech
Middle

Ποια είναι η διαφορά μεταξύ των ετικετών <script>, <script async> και <script defer>;

sobes.tech AI

Απάντηση από AI

Το τυπικό <script> σταματά την ανάλυση HTML, φορτώνει το script και το εκτελεί, στη συνέχεια η ανάλυση συνεχίζεται.

Το <script async> φορτώνει το script ασύγχρονα, ενώ συνεχίζεται η ανάλυση HTML. Το script εκτελείται αμέσως μετά τη φόρτωση. Η σειρά εκτέλεσης δεν είναι εγγυημένη.

Το <script defer> φορτώνει το script ασύγχρονα, ενώ συνεχίζεται η ανάλυση HTML. Το script εκτελείται μόνο μετά την ολοκλήρωση της ανάλυσης HTML, αλλά πριν από το γεγονός DOMContentLoaded. Η σειρά εκτέλεσης των scripts με defer διατηρείται σύμφωνα με την εμφάνισή τους στο HTML.

Πίνακας σύγκρισης:

Ιδιότητα Ανάλυση HTML κατά τη φόρτωση του script Εκτέλεση script Διατήρηση σειράς εκτέλεσης
Χωρίς Διακοπή Άμεσα μετά τη φόρτωση Ναι
async Συνεχίζεται Άμεσα μετά τη φόρτωση (μπορεί να διακόψει την ανάλυση) Όχι
defer Συνεχίζεται Μετά την ολοκλήρωση της ανάλυσης HTML Ναι

Παράδειγμα:

<!-- Κανονικό script - μπλοκάρει την ανάλυση -->
<script src="script1.js"></script>

<!-- Asynchronous script - δεν μπλοκάρει την ανάλυση, εκτελείται αμέσως μετά τη φόρτωση -->
<script src="script2.js" async></script>

<!-- Αναβαθμισμένο script - δεν μπλοκάρει την ανάλυση, εκτελείται μετά την ανάλυση HTML -->
<script src="script3.js" defer></script>
<script src="script4.js" defer></script> <!-- Θα εκτελεστεί μετά το script3.js -->