javascript - node - Comprender cuándo y cómo usar Require.JS
requirejs jquery (2)
Acabo de comenzar a trabajar con Require.JS y no estoy del todo claro en los casos apropiados en los que debería usarse, así como la forma correcta de usarlo en esos casos.
Así es como actualmente tengo las cosas configuradas con Require.JS. Tengo dos funciones, functionA()
y functionB()
. Ambas funciones requieren una función adicional, functionC()
para funcionar correctamente.
Solo quiero cargar functionC () cuando sea necesario, es decir, cuando se llame a functionA () o functionB (). Entonces tengo los siguientes archivos:
functionC.js
functionC(){
//do stuff
}
functionA.js
functionA(){
define([''functionC''],function(){
//functionC() is loaded because it is listed as a dependency, so we can proceed
//do some functionA() stuff
});
}
functionB.js
functionB(){
define([''functionC''],function(){
//functionC() is loaded because it is listed as a dependency, so we can proceed
//do some functionB() stuff
});
}
Entonces, ¿está configurado correctamente? Y si termino llamando tanto a functionA () como a functionB () en la misma página, ¿se está trabajando extra ya que ambos cargan el archivo functionC.js? Si es así, ¿es eso un problema? Y si es así, ¿hay alguna forma de configurarlo para que primero comprueben si FunctionC.js ya se ha cargado y solo lo cargan si no lo ha estado? Finalmente, ¿es este un uso apropiado de Require.JS?
Puede encontrar detalles sobre la modularidad RequireJS y JavaScript aquí: modularidad de JavaScript con RequireJS (del código de spaghetti al código de ravioles)
define()
solo debe usarse para definir un módulo. Para el ejemplo anterior, donde una porción de código debe cargarse dinámicamente, usar require()
es más apropiado:
functionA.js
functionA(){
require([''functionC''],function(functionC){
//use funcC in here to call functionC
});
}
Algunas notas:
-
require([])
es asíncrono, por lo que si la persona que llama de lafunctionA
espera un valor de retorno de esa función, es probable que haya errores. Lo mejor es que lafunctionA
acepte una devolución de llamada que se invoca cuando lafunctionA
termina con su trabajo. - El código anterior llamará
require()
para cada llamada afunctionA
; sin embargo, después de la primera llamada, no se aplica ninguna penalización para cargarfunctionC.js
, solo se carga una vez. La primera vez querequire()
se llama, cargaráfunctionC.js
, pero el resto del tiempo, RequireJS sabe que ya está cargado, por lo que llamará a lafunction(functionC){}
sin solicitarfunctionC.js
nuevamente.