Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 9631|Resposta: 0

[JavaScript] instrução require() especificação AMD

[Copiar link]
Publicado em 13/02/2019 14:01:09 | | |
Este post foi editado pela última vez por Summer em 13-02-2019 às 14:04

Em 2009, o programador americano Ryan Dahl criou node.js projeto para usar a linguagem JavaScript para programação do lado do servidor.

Isso marca o nascimento da "programação modular em Javascript". A complexidade da interface é limitada, e é aceitável não ter módulos, mas do lado do servidor, devem existir módulos para interagir com o sistema operacional e outras aplicações, caso contrário não pode ser programado de forma alguma.

Uma das ideias mais importantes na programação de nós são os módulos, e é essa ideia que torna possível a engenharia em larga escala do JavaScript. A programação modular era popular no mundo JS, e baseava-se nisso, e depois, no lado do navegador, também apareceram kits de ferramentas como requirejs e seajs, por assim dizer, sob a especificação correspondente, que requerem toda programação modular antes do ES6, mesmo agora, antes do módulo ES6 ser totalmente implementado.

No CommonJS, o módulo de exposição usa module.exports e exports, e muitas pessoas não entendem por que há dois objetos expostos, que serão introduzidos mais adiante

No CommonJS, existe um método global require() que é usado para carregar módulos. Assumindo que exista um módulo de matemática math.js, ele pode ser carregado assim.



Você pode então chamar os métodos fornecidos pelo módulo de:

É justamente por causa do método de requerimento usado pelo CommonJS que o método de requerimento usado pela AMD e CMD também foi usado posteriormente para se referir ao estilo dos módulos

Especificação AMD

Com módulos do lado do servidor, é natural que todos queiram módulos do lado do cliente. E é melhor que os dois sejam compatíveis, e que um módulo possa rodar tanto no servidor quanto no navegador sem modificações.

No entanto, há uma limitação importante que torna a especificação CommonJS inaplicável a ambientes de navegador. Ainda assim, o código da seção anterior, se rodar em um navegador, haverá um grande problema



A segunda linha math.add(2, 3) roda após a primeira linha require('math'), então ela precisa esperar math.js carregamento terminar. Ou seja, se o tempo de carregamento for longo, o app inteiro para por aí e espera.

Isso não é um problema do lado do servidor, pois todos os módulos são armazenados no disco rígido local e podem ser carregados de forma síncrona, e o tempo de espera é o tempo de leitura do disco rígido. No entanto, para navegadores, isso é um grande problema, pois os módulos ficam no lado do servidor, e o tempo de espera depende da velocidade da Internet, que pode levar bastante tempo, e o navegador fica em estado de "morte suspensa".


Portanto, módulos do lado do navegador não podem usar "síncrono", mas apenas "assíncrono". Esse é o contexto do nascimento da especificação AMD.

AMD é uma abreviação de "Definição de Módulo Assíncrono", que significa "Definição de Módulo Assíncrono". Ele carrega o módulo de forma assíncrona, e o carregamento do módulo não afeta a operação de suas instruções subsequentes. Todas as instruções que dependem desse módulo são definidas em uma função de callback que não será executada até que o carregamento seja concluído.

Módulos devem ser definidos com uma função define() específica.


•ID: string, nome do módulo (opcional)
•Dependências: é o módulo dependente que queremos carregar (opcional), usando o caminho relativo. , note que é um formato de array
•fábrica: método fábrica, retorna uma função de módulo
Se um módulo não depende de outros módulos, ele pode ser definido diretamente na função define().


Se o módulo também depende de outros módulos, então o primeiro argumento da função define() deve ser um array que indica as dependências do módulo.



Quando a função requerido() carrega o módulo acima, ela carrega Lib.js arquivo primeiro.

A AMD também usa a instrução requir() para carregar o módulo, mas, ao contrário do CommonJS, requer dois parâmetros:

O primeiro parâmetro [módulo] é um array, e os membros nele são os módulos a serem carregados; O segundo parâmetro de callback é a função de callback após o sucesso da carga. Se você reescrever o código anterior para a versão AMD, fica assim:


Math.add() não está sincronizado com o carregamento do módulo de matemática, e o navegador não suspende a animação. Então, obviamente, a AMD é mais adequada para o ambiente do navegador.

Atualmente, existem duas principais bibliotecas Javascript que implementam a especificação AMD :require.js e curl.js.







Anterior:init: function (){}方法的写法原因
Próximo:【Combate Prático】Kibana 6.5.2 Tutorial de Chinês
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com