2mdc
C/ Matias Turrión, 24, 1º
Madrid 28043
Tel: 91 759 00 24
Fax: 91 759 15 18

Blog: Desarrollo web

Carga dinámica de JavaScript

Publicado el: 17/05/2011 en: Desarrollo web | Añadir Comentario

Envía esta entrada a menéame Envía esta entrada a del.ici.ous Envía esta entrada a facebook Envía esta entrada a Twitter

A medida que nos sumergimos en la web 2.0, los sitios que encontramos son más y más elaborados, no sólo estéticamente sino funcionalmente.

Hojas de estilo complejas, multitud de imagenes, grandes librerías Javascript…

Parte del tiempo de carga requerido por todos esos archivos se puede paliar cargándolos dinámicamente, bajo demanda, cuando realmente sean necesarios. A continuación describo una forma de hacer esto con archivos Javascript.

El siguiente código permite llamar a funciones que no se hayan cargado con la página, exactamente de la misma forma que si hubiesen sido cargadas.

El script que se carga inicialmente ha de proveer las funciones que se usarán en la página. Pero en lugar de implementar su código real consistirán en una llamada a una función de carga de scripts.

Así conseguimos reducir el tiempo inicial de carga, y cargar a posteriori exclusivamente los scripts que realmente necesitemos.

El ejemplo consiste en dos ficheros, primero “test.html”:


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es" dir="ltr">
<head>
<title>javascript load on demand</title>
<script type="text/javascript">
<!--
function loadScript(scrPath, callback, context){
var scrId = 'jsframe_script_' + scrPath.replace(/[^a-zA-Z\d_]+/, '');
if(document.getElementById(scrId)){
return(false); //ya cargado
}
if(!context) var context = this;

var script = document.createElement('script');
script.id = scrId;
//script.charset = "windows-1250";
script.type = 'text/javascript';
script.src = scrPath; //relativo o absoluto, ej: 'http://path.to.javascript/file.js'

if(script.readyState){ //IE
script.onreadystatechange = function(){
if(script.readyState == "loaded" || script.readyState == "complete"){
script.onreadystatechange = null;
return((function(cb, ctx){
return(cb.call(ctx));
})(callback, context));
}
};
}
else{
script.onload = function(){
return((function(cb, ctx){
return(cb.call(ctx));
})(callback, context));
};
}

var h = document.getElementsByTagName("head").length ? document.getElementsByTagName("head")[0] : document.body;
h.appendChild(script);
}
function loadMethod(method, args, library){
var tempCall = (function (obj, as){
return(function (){eval('obj.' + method + '.apply(obj, as);');});
})(this, args);
if(!library){
alert("Can't load " + method);
}

loadScript(library, tempCall, this);
}

function fTest(){return(loadMethod('fTest', arguments, 'test.js'));}
-->
</script>
</head>
<body>
<h1>javascript dinamically load, by jmanuel@2mdc.com</h1>
<p><a href="#" onclick="fTest();">click here</a></p>
</body>
</html>

Finalmente el fichero JavaScript que será cargado on-demand, “test.js”:


function fTest(){
alert('scripts auto-load test');
}

Véase también | Carga dinámica de JavaScript (2)

Valore de 1 a 5 este artículo
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (4 voto(s), media: 3.75 sobre 5)

Deja tu comentario



Tags HTML Permitidos:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

2mdc.com Aplicaciones web C/ Matias Turrión, 24, 1º, Madrid 28043 Tel: 91 759 00 24 Fax: 91 759 15 18 Aplicaciones web