Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 9631|Respuesta: 0

[JavaScript] Instrucción requir() especificación AMD

[Copiar enlace]
Publicado en 13/2/2019 14:01:09 | | |
Esta publicación fue editada por última vez por Summer el 13-2-2019 a las 14:04

En 2009, el programador estadounidense Ryan Dahl creó node.js proyecto para utilizar el lenguaje JavaScript en programación del lado del servidor.

Esto marca el nacimiento de la "programación modular en Javascript". La complejidad del front-end es limitada, y está bien no tener módulos, pero en el lado del servidor debe haber módulos para interactuar con el sistema operativo y otras aplicaciones, de lo contrario no se puede programar en absoluto.

Una de las ideas más importantes en la programación de nodos son los módulos, y es esta idea la que hace posible la ingeniería a gran escala de JavaScript. La programación modular era popular en el mundo JS, y se basaba en esto, y luego, en el lado del navegador, también aparecieron kits de herramientas como requirejs y seajs, por así decirlo, bajo la especificación correspondiente, que requería toda la programación modular antes de ES6, incluso ahora, antes de que el módulo ES6 estuviera completamente implementado.

En CommonJS, el módulo de exposición utiliza module.exports y exports, y mucha gente no entiende por qué hay dos objetos expuestos, que se introducirán más adelante

En CommonJS, existe un método global require() que se utiliza para cargar módulos. Suponiendo que haya un módulo de matemáticas math.js, se puede cargar así.



A continuación, puedes llamar a los métodos proporcionados por el módulo:

Es precisamente por el método de requerimiento utilizado por CommonJS que el método de requerimiento empleado por AMD y CMD también se empleó posteriormente para referirse al estilo de los módulos

Especificaciones de AMD

Con los módulos del lado del servidor, es natural que todos quieran módulos del lado del cliente. Y es mejor que ambos sean compatibles, y que un módulo pueda ejecutarse tanto en el servidor como en el navegador sin modificaciones.

Sin embargo, existe una limitación importante que hace que la especificación CommonJS no sea aplicable a entornos de navegador. Aun así, el código de la sección anterior, si se ejecuta en un navegador, habrá un gran problema



La segunda línea math.add(2, 3) se ejecuta después de la primera línea require('math'), así que tiene que esperar a que termine math.js carga. Es decir, si el tiempo de carga es largo, toda la app se detendrá ahí y esperará.

Esto no supone un problema en el lado del servidor, ya que todos los módulos se almacenan en el disco duro local y pueden cargarse de forma síncrona, y el tiempo de espera es el tiempo de lectura del disco duro. Sin embargo, para los navegadores, esto es un gran problema, porque los módulos se colocan en el lado del servidor, y el tiempo de espera depende de la velocidad de Internet, que puede tardar mucho, y el navegador está en estado de "muerte suspendida".


Por lo tanto, los módulos del navegador no pueden usar "síncrono", sino solo "asíncrono". Este es el contexto del nacimiento de la especificación AMD.

AMD es una abreviatura de "Definición de Módulo Asíncrono", que significa "Definición de Módulo Asíncrono". Carga el módulo de forma asíncrona, y la carga del módulo no afecta al funcionamiento de sus sentencias posteriores. Todas las sentencias que dependen de este módulo se definen en una función de callback que no se ejecutará hasta que la carga esté completa.

Los módulos deben definirse con una función define() específica.


•ID: cadena, nombre del módulo (opcional)
•Dependencias: es el módulo dependiente que queremos cargar (opcional), usando la ruta relativa. , ten en cuenta que es un formato de array
•Factory: método de fábrica, devuelve una función de módulo
Si un módulo no depende de otros módulos, puede definirse directamente en la función define().


Si el módulo también depende de otros módulos, entonces el primer argumento de la función define() debe ser un array que indique las dependencias del módulo.



Cuando la función requir() carga el módulo anterior, cargará primero Lib.js archivo.

AMD también utiliza la instrucción requir() para cargar el módulo, pero a diferencia de CommonJS, requiere dos parámetros:

El primer parámetro [módulo] es un array, y sus miembros son los módulos que se van a cargar; El segundo parámetro de callback es la función de callback después de que la carga tiene éxito. Si reescribes el código anterior en forma de AMD, se ve así:


math.add() no está sincronizado con la carga de módulos de matemáticas, y el navegador no suspende la animación. Así que, obviamente, AMD es más adecuado para el entorno del navegador.

Actualmente, existen dos bibliotecas principales de Javascript que implementan la especificación AMD :require.js y curl.js.







Anterior:init: function (){}方法的写法原因
Próximo:【Combate Práctico】Kibana 6.5.2 Tutorial de chino chino
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com