Di IE6/7, JavaScript akan menghalangi halaman yang diajukan dari dua aspek:
Sumber daya halaman web di bawah tag skrip akan berhenti meminta dan mengunduh sebelum skrip dimuat.
Elemen HTML di bawah tag skrip akan berhenti render sebelum skrip dimuat.
Dalam IE6/7 Firefox2/3 Safari3 Chrome1 dan Opera, tag skrip akan menghambat pengunduhan:
Meskipun skrip dapat bersamaan dengan IE8, Safari4, dan Chrome2, masih menghambat pengunduhan sumber daya lain:
Ada 6 cara untuk mengunduh skrip secara paralel dengan sumber daya lain:
1.xhr eval - unduh skrip melalui xhr (objek xmlhttpRequest), dan kemudian gunakan metode eval untuk menjalankan responsEtext XHR
2.xHR Injeksi - Unduh skrip melalui xhr, lalu buat tag skrip dan masukkan ke dalam dokumen (tag tubuh atau head), lalu atur atribut teks dari tag skrip ke nilai responsEtext XHR
3.xhr di iframe - Masukkan tag skrip ke dalam iframe dan unduh melalui iframe
4.Script DOM Elemen - Buat tag skrip dan arahkan atribut SRC ke alamat skrip Anda
5.Script Disper - Tambahkan atribut tag tag skrip. Ini hanya berlaku di IE, tetapi firefox3.1 juga mendukung atribut ini.
6. Gunakan Metode Dokumen.Write untuk menulis <skrip src = ""> di halaman, ini hanya valid di IE.
Anda dapat melihat contoh penggunaan setiap metode melalui Cuzillion.
Jika ada beberapa skrip inline yang perlu dieksekusi setelah skrip eksternal dieksekusi, mereka perlu disinkronkan. Disebut "kopling", kopling skrip asinkron artikel ini memperkenalkan beberapa metode yang saat ini dapat mengimplementasikan "coupling".
headjs, dapat mengaktifkan JS untuk diunduh secara bersamaan (tetapi dieksekusi secara berurutan): http://headjs.com/
Salinan kode adalah sebagai berikut:
head.js ("/path/to/jQuery.js", "/google/analytics.js", "/js/site.js", function () {
// Semua selesai
});
// Kasing paling sederhana. Muat dan jalankan skrip tunggal tanpa memblokir.
head.js ("/path/to/file.js");
// Muat skrip dan menjalankan fungsi setelah dimuat
head.js ("/path/to/file.js", function () {
});
// Muat file secara paralel tetapi jalankan secara berurutan
head.js ("file1.js", "file2.js", ... "filen.js");
// Jalankan fungsi setelah semua skrip telah dimuat
head.js ("file1.js", "file2.js", function () {
});
// File dimuat secara paralel dan dieksekusi agar mereka tiba
head.js ("file1.js");
head.js ("file2.js");
head.js ("file3.js");
// yang sebelumnya juga dapat ditulis sebagai
head.js ("file1.js"). js ("file1.js"). js ("file3.js");