2011-02-06 12 views
7

Sólo me preguntaba acerca de esto ...JavaScript orden de carga de archivos y gestión de la dependencia

Tengo varios archivos JavaScript distinto, que todos contienen código basado en el patrón de módulo. Algunos de los módulos tienen algunos de los otros como dependencias. Si sé que no se invocará el código en el código HTML hasta que se cargue la página, ¿sigue siendo importante el orden en que se cargan los archivos?

es el hecho de que el código del módulo se encuentra dentro de una función inmediata suficiente para desencadenar la exigencia de que los otros módulos pueden cargar ya?

estoy dispuesto a mirar en la biblioteca RequireJS si es necesario, pero sólo quería saber si lo que voy es bien primero.

Respuesta

8

Si es posible, configure sus dependencias para que pueda cargar y configurar todos sus módulos cuando se carga el archivo javascript (es decir, utilizar una función autoejecutable).

Y luego llame a una función .init o equivalente en todos sus módulos en un bloque .ready. De esta forma, puede llamar explícitamente a cualquier funcionalidad que requiera dependencias después de que todos sus archivos se hayan cargado.

Un ejemplo:

foo.js 
(function() { 
    function initFoo() { ... } 
    ... 
    window.namespace.foo = { 
     init: initFoo 
    } 
}()); 

bar.js 
(function() { 
    function initBar() { ... } 
    ... 
    window.namespace.bar = { 
     bar: initBar 
    } 
}()); 

main.js 
(function() { 
    $.ready(function() { 
      window.namespace.foo.init(); 
      window.namespace.bar.bar(); // dependancies on foo 
    }); 

}()); 

Cualquier código que tampoco tienen dependencias pueden ser ejecutadas en los cierres de foo.js & bar.js y cualquier código dependiente puede ser llamado a través de su función de init en .ready una vez que todos los archivos se han cargado.

+0

Gracias por la sugerencia, pero después de un poco más de investigación y consideración, creo que me voy a ir con una solución RequireJS. –

+0

@JasonMiesionczek Creo que la solución RequireJS es un poco pesada para mi gusto. ¡También hace que mi código sea feo! Prefiero diseñar mi código para que el código independiente se cargue inmediatamente y el código dependiente se inicie manualmente. Mientras no tengas ridículas dependencias circulares, entonces el código debería estar bien. – Raynos

+0

mi problema es que tengo dependencias circulares, lo que hace que diseñar mi propia solución sea mucho más difícil. –

1

Si todos los archivos se han cargado en el momento inicia la ejecución, el orden de carga no importa.

Se podría ser posible que algunos motores de JavaScript comienzan a elaborar guiones tan pronto como se descargan, por lo que este podrían afectar eso. ¡Pero los guiones todavía se ejecutarán!

Cuestiones relacionadas