Saya menggunakan beberapa plugin, widget khusus, dan beberapa pustaka lain dari JQuery. sebagai hasilnya saya memiliki beberapa file .js dan .css. Saya perlu membuat loader untuk situs saya karena perlu beberapa waktu untuk memuat. alangkah baiknya jika saya dapat menampilkan loader sebelum mengimpor semua:
<script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="js/myFunctions.js"></script>
<link type="text/css" href="css/main.css" rel="stylesheet" />
...
....
etc
Saya telah menemukan beberapa tutorial yang memungkinkan saya mengimpor pustaka JavaScript secara asinkron. misalnya saya bisa melakukan sesuatu seperti:
(function () {
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'js/jquery-ui-1.8.16.custom.min.js';
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
})();
untuk beberapa alasan ketika saya melakukan hal yang sama untuk semua file saya, halaman tidak berfungsi. Saya telah berusaha begitu lama untuk mencoba menemukan di mana masalahnya tetapi saya tidak dapat menemukannya. Pertama saya pikir itu mungkin karena beberapa fungsi javascript bergantung pada yang lain. tetapi saya memuatnya dalam urutan yang benar menggunakan fungsi waktu habis ketika satu selesai saya melanjutkan dengan yang berikutnya dan halaman masih berperilaku aneh. misalnya saya tidak dapat mengklik tautan dll ... meskipun animasi masih berfungsi ..
Pokoknya
Inilah yang saya pikirkan ... Saya percaya browser memiliki cache, itulah sebabnya butuh waktu lama untuk memuat halaman untuk pertama kalinya dan kali berikutnya cepat. jadi yang saya pikirkan adalah mengganti halaman index.html saya dengan halaman yang memuat semua file ini secara asynchronous. ketika ajax selesai memuat semua file tersebut dialihkan ke halaman yang saya rencanakan untuk digunakan. saat menggunakan halaman itu seharusnya tidak membutuhkan waktu lama untuk memuat karena file-file tersebut harus sudah dimasukkan ke dalam cache browser. di halaman indeks saya (halaman tempat file .js dan .css dimuat secara asinkron), saya tidak peduli jika ada error. Saya hanya akan menampilkan loader dan mengarahkan halaman setelah selesai ...
Apakah ide ini alternatif yang bagus? atau haruskah saya terus mencoba menerapkan metode asynchronous?
EDIT
cara saya memuat semua asinkron seperti:
importScripts();
function importScripts()
{
//import: jquery-ui-1.8.16.custom.min.js
getContent("js/jquery-1.6.2.min.js",function (code) {
var s = document.createElement('script');
s.type = 'text/javascript';
//s.async = true;
s.innerHTML=code;
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
setTimeout(insertNext1,1);
});
//import: jquery-ui-1.8.16.custom.min.js
function insertNext1()
{
getContent("js/jquery-ui-1.8.16.custom.min.js",function (code) {
var s = document.createElement('script');
s.type = 'text/javascript';
s.innerHTML=code;
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
setTimeout(insertNext2,1);
});
}
//import: jquery-ui-1.8.16.custom.css
function insertNext2()
{
getContent("css/custom-theme/jquery-ui-1.8.16.custom.css",function (code) {
var s = document.createElement('link');
s.type = 'text/css';
s.rel ="stylesheet";
s.innerHTML=code;
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
setTimeout(insertNext3,1);
});
}
//import: main.css
function insertNext3()
{
getContent("css/main.css",function (code) {
var s = document.createElement('link');
s.type = 'text/css';
s.rel ="stylesheet";
s.innerHTML=code;
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
setTimeout(insertNext4,1);
});
}
//import: jquery.imgpreload.min.js
function insertNext4()
{
getContent("js/farinspace/jquery.imgpreload.min.js",function (code) {
var s = document.createElement('script');
s.type = 'text/javascript';
s.innerHTML=code;
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
setTimeout(insertNext5,1);
});
}
//import: marquee.js
function insertNext5()
{
getContent("js/marquee.js",function (code) {
var s = document.createElement('script');
s.type = 'text/javascript';
s.innerHTML=code;
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
setTimeout(insertNext6,1);
});
}
//import: marquee.css
function insertNext6()
{
getContent("css/marquee.css",function (code) {
var s = document.createElement('link');
s.type = 'text/css';
s.rel ="stylesheet";
s.innerHTML=code;
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
setTimeout(insertNext,1);
});
}
function insertNext()
{
setTimeout(pageReadyMan,10);
}
}
// get the content of url and pass that content to specified function
function getContent( url, callBackFunction )
{
// attempt to create the XMLHttpRequest and make the request
try
{
var asyncRequest; // variable to hold XMLHttpRequest object
asyncRequest = new XMLHttpRequest(); // create request object
// register event handler
asyncRequest.onreadystatechange = function(){
stateChange(asyncRequest, callBackFunction);
}
asyncRequest.open( 'GET', url, true ); // prepare the request
asyncRequest.send( null ); // send the request
} // end try
catch ( exception )
{
alert( 'Request failed.' );
} // end catch
} // end function getContent
// call function whith content when ready
function stateChange(asyncRequest, callBackFunction)
{
if ( asyncRequest.readyState == 4 && asyncRequest.status == 200 )
{
callBackFunction(asyncRequest.responseText);
} // end if
} // end function stateChange
dan bagian yang aneh adalah bahwa semua gaya bekerja ditambah semua fungsi javascript. halaman dibekukan karena beberapa alasan ...