Red de conocimientos turísticos - Conocimientos sobre calendario chino - Por qué NodeJs no utiliza la idea del módulo AMD

Por qué NodeJs no utiliza la idea del módulo AMD

Cuando apareció nodeJS basado en la especificación commonJS, el concepto de módulos del lado del servidor ya se había formado y, naturalmente, la gente también quería módulos del lado del cliente. Idealmente, los dos deberían ser compatibles y un módulo puede ejecutarse tanto en el servidor como en el navegador sin modificaciones. Sin embargo, la especificación CommonJS tiene una gran limitación: no es adecuada para entornos de navegador. O el código anterior, si se ejecuta en el navegador, habrá un gran problema, ¿puedes verlo?

var math = require('math');

math.add(2, 3);

La segunda línea math.add(2, 3 ) se ejecuta después de la primera línea require('math'), por lo que debe esperar a que se cargue math.js. Es decir, si la carga tarda mucho, toda la aplicación se detiene y espera. Notarás que require es sincrónico.

Esto no es un problema para el lado del servidor, porque todos los módulos se almacenan en el disco duro local y se pueden cargar sincrónicamente, y el tiempo de espera es el tiempo de lectura del disco duro. Sin embargo, esto es un gran problema para el navegador, porque el módulo se almacena en el lado del servidor y el tiempo de espera depende de la velocidad de Internet, lo que puede llevar mucho tiempo, dejando el navegador en un estado "suspendido".

Por lo tanto, los módulos en el lado del navegador no se pueden cargar "sincrónicamente" y solo se pueden cargar "asincrónicamente". Este es el trasfondo de la especificación AMD.

CommonJS está formulado principalmente para el rendimiento de JS en el back-end. No es adecuado para el front-end. La aparición de AMD (Definición de módulo asincrónico) es una especificación formulada principalmente para el rendimiento del front-end. final JS.

AMD es la abreviatura de Asynchronous Module Definición, que significa "definición de módulo asíncrono". Utiliza un método asincrónico para cargar el módulo, es decir, cargar el módulo no afectará la ejecución de las declaraciones detrás del módulo. Todas las declaraciones que dependen de un módulo se definen en una función de devolución de llamada que solo se ejecuta después de cargar el módulo.

AMD también usa require() para cargar módulos, pero a diferencia de CommonJS, requiere dos parámetros:

require([module], callback);

El el primer parámetro [módulo] es la matriz del módulo que se cargará; la devolución de llamada del segundo parámetro es el módulo que se cargará; La devolución de llamada del parámetro es la función de devolución de llamada después de una carga exitosa. Si el código anterior se reescribiera en formato AMD, se vería así:

require(['math'], function (math) {

math.add(2, 3 );

});

math.add() no está sincronizado con la carga del módulo matemático y el navegador no aparecerá suspendido. Por lo tanto, AMD es claramente más adecuado para entornos de navegador. Actualmente, existen dos bibliotecas principales de Javascript que implementan la especificación AMD: require.js y curl.js.