Vi esto y pensé que se veía bastante bien, así que realicé algunas pruebas.
Puede parecer un enfoque limpio, pero en términos de rendimiento, está retrasado en un 50% en comparación con el tiempo que tardó en cargar una página con la función de carga jQuery o usando el enfoque de JavaScript de vainilla de XMLHttpRequest, que eran más o menos similares entre sí.
Me imagino que esto se debe a que debajo del capó obtiene la página exactamente de la misma manera, pero también tiene que lidiar con la construcción de un nuevo objeto HTMLElement.
En resumen, sugiero usar jQuery. La sintaxis es tan fácil de usar como puede ser y tiene una devolución de llamada bien estructurada para su uso. También es relativamente rápido. El enfoque de vainilla puede ser más rápido en unos pocos milisegundos, pero la sintaxis es confusa. Solo usaría esto en un entorno donde no tuviera acceso a jQuery.
Aquí está el código que solía probar: es bastante rudimentario, pero los tiempos volvieron muy consistentes en múltiples intentos, por lo que diría que son precisos a alrededor de + - 5 ms en cada caso. Las pruebas se ejecutaron en Chrome desde mi propio servidor doméstico:
<!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