ฉันใช้ปลั๊กอินหลายตัววิดเจ็ตแบบกำหนดเองและไลบรารีอื่น ๆ จาก JQuery ส่งผลให้ฉันมีไฟล์. js และ. css หลายไฟล์ ฉันต้องการสร้างตัวโหลดสำหรับไซต์ของฉันเนื่องจากต้องใช้เวลาพอสมควรในการโหลด จะเป็นการดีถ้าฉันสามารถแสดงตัวโหลดก่อนที่จะนำเข้าทั้งหมด:
<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
ฉันพบบทเรียนหลายอย่างที่ช่วยให้ฉันสามารถนำเข้าไลบรารี JavaScript แบบอะซิงโครนัสได้ ตัวอย่างเช่นฉันสามารถทำสิ่งต่างๆเช่น:
(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);
})();
ด้วยเหตุผลบางประการเมื่อฉันทำสิ่งเดียวกันกับไฟล์ทั้งหมดของฉันหน้าเว็บไม่ทำงาน ฉันพยายามมานานแล้วที่จะพยายามค้นหาว่าปัญหาอยู่ที่ใด แต่ไม่พบ ก่อนอื่นฉันคิดว่าอาจเป็นเพราะฟังก์ชันจาวาสคริปต์บางอย่างขึ้นอยู่กับฟังก์ชันอื่น ๆ แต่ฉันโหลดตามลำดับที่ถูกต้องโดยใช้ฟังก์ชันหมดเวลาเมื่อหนึ่งเสร็จฉันดำเนินการต่อไปและหน้ายังคงทำงานแปลก ๆ ตัวอย่างเช่นฉันไม่สามารถคลิกที่ลิงค์ ฯลฯ ... ภาพเคลื่อนไหวยังคงใช้งานได้ ..
อย่างไรก็ตาม
นี่คือสิ่งที่ฉันคิด ... ฉันเชื่อว่าเบราว์เซอร์มีแคชนั่นเป็นสาเหตุที่ต้องใช้เวลานานในการโหลดหน้าเว็บในครั้งแรกและในครั้งต่อไปที่รวดเร็ว ดังนั้นสิ่งที่ฉันคิดจะทำคือแทนที่หน้า index.html ของฉันด้วยหน้าที่โหลดไฟล์ทั้งหมดนี้แบบอะซิงโครนัส เมื่อ ajax เสร็จสิ้นการโหลดไฟล์เหล่านั้นทั้งหมดจะเปลี่ยนเส้นทางไปยังหน้าที่ฉันวางแผนจะใช้ เมื่อใช้หน้านั้นไม่ควรใช้เวลานานในการโหลดเนื่องจากไฟล์ควรจะรวมอยู่ในแคชของเบราว์เซอร์ ในหน้าดัชนีของฉัน (หน้าที่มีไฟล์. js และ. css โหลดแบบอะซิงโครนัส) ฉันไม่สนใจว่าจะได้รับข้อผิดพลาด ฉันจะแสดงตัวโหลดและเปลี่ยนเส้นทางหน้าเมื่อเสร็จสิ้น ...
ความคิดนี้เป็นทางเลือกที่ดีหรือไม่? หรือฉันควรพยายามใช้วิธีการแบบอะซิงโครนัสต่อไป?
แก้ไข
วิธีที่ฉันโหลดทุกอย่าง async เป็นดังนี้:
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
และส่วนที่แปลกคือการทำงานของสไตล์ทั้งหมดบวกกับฟังก์ชันจาวาสคริปต์ทั้งหมด หน้าถูกแช่แข็งด้วยเหตุผลบางประการแม้ว่า ...