ฉันเห็นสิ่งนี้และคิดว่ามันดูค่อนข้างดีดังนั้นฉันจึงทำการทดสอบกับมัน
อาจดูเหมือนเป็นวิธีที่สะอาดตา แต่ในแง่ของประสิทธิภาพมันล้าหลังกว่า 50% เมื่อเทียบกับเวลาที่โหลดหน้าเว็บด้วยฟังก์ชั่นโหลด jQuery หรือใช้วิธี vanilla javascript ของ XMLHttpRequest ซึ่งคล้าย ๆ กัน
ฉันคิดว่านี่เป็นเพราะภายใต้ประทุนมันจะได้รับหน้าในแบบเดียวกันแน่นอน แต่มันก็ต้องจัดการกับการสร้างวัตถุ HTMLElement ใหม่ทั้งหมดด้วยเช่นกัน
โดยสรุปผมแนะนำให้ใช้ jQuery ไวยากรณ์เป็นเรื่องเกี่ยวกับการใช้งานง่ายที่สุดเท่าที่จะเป็นไปได้และมีการโทรกลับโครงสร้างอย่างเพื่อให้คุณใช้ มันค่อนข้างเร็ว วิธีวานิลลาอาจเร็วขึ้นโดยใช้เวลาไม่กี่มิลลิวินาทีที่ไม่สามารถสังเกตเห็นได้ แต่ไวยากรณ์มีความสับสน ฉันจะใช้สิ่งนี้ในสภาพแวดล้อมที่ฉันไม่สามารถเข้าถึง jQuery
นี่คือรหัสที่ฉันใช้ในการทดสอบ - มันค่อนข้างพื้นฐาน แต่เวลากลับมาสอดคล้องกันมากในการพยายามหลายครั้งดังนั้นฉันจะบอกว่าแม่นยำประมาณ + - 5ms ในแต่ละกรณี การทดสอบรันใน Chrome จากเซิร์ฟเวอร์ที่บ้านของฉันเอง:
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
</head>
<body>
<div id="content"></div>
<script>
/**
* Test harness to find out the best method for dynamically loading a
* html page into your app.
*/
var test_times = {};
var test_page = 'testpage.htm';
var content_div = document.getElementById('content');
// TEST 1 = use jQuery to load in testpage.htm and time it.
/*
function test_()
{
var start = new Date().getTime();
$(content_div).load(test_page, function() {
alert(new Date().getTime() - start);
});
}
// 1044
*/
// TEST 2 = use <object> to load in testpage.htm and time it.
/*
function test_()
{
start = new Date().getTime();
content_div.innerHTML = '<object type="text/html" data="' + test_page +
'" onload="alert(new Date().getTime() - start)"></object>'
}
//1579
*/
// TEST 3 = use httpObject to load in testpage.htm and time it.
function test_()
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
{
content_div.innerHTML = xmlHttp.responseText;
alert(new Date().getTime() - start);
}
};
start = new Date().getTime();
xmlHttp.open("GET", test_page, true); // true for asynchronous
xmlHttp.send(null);
// 1039
}
// Main - run tests
test_();
</script>
</body>
</html>
load_home(); return false