Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 9631|Відповідь: 0

[JavaScript] require() statement специфікація AMD

[Копіювати посилання]
Опубліковано 13.02.2019 14:01:09 | | |
Цей допис востаннє відредаговано Саммер 13.02.2019 14:04

У 2009 році американський програміст Раян Дал створив node.js проєкт використання мови JavaScript для серверного програмування.

Це знаменує народження «модульного програмування на Javascript». Складність фронтенду обмежена, і нормально не мати модулів, але на стороні сервера мають бути модулі для взаємодії з операційною системою та іншими застосунками, інакше його взагалі не можна запрограмувати.

Одна з найважливіших ідей у програмуванні вузлів — це модулі, і саме ця ідея робить можливим масштабне інженерування JavaScript. Модульне програмування було популярним у світі JS, і воно базувалося на цьому, а на стороні браузера з'явилися інструментарії, такі як requirejs і seajs, так би мовити, згідно з відповідною специфікацією, що потрібно керувати всіма модульними програмуваннями до ES6, навіть зараз, до повної реалізації модуля ES6.

У CommonJS модуль експозиції використовує module.exports і exports, і багато хто не розуміє, чому є два відкриті об'єкти, які будуть представлені пізніше

У CommonJS існує глобальний метод require(), який використовується для завантаження модулів. Якщо є math.js математичного модуля, його можна завантажити ось так.



Потім можна викликати методи, які надає модуль:

Саме через метод demand, який використовував CommonJS, метод demand, який використовували AMD і CMD, пізніше також використовувався для позначення стилю модулів

Специфікація AMD

З серверними модулями природно, що всі хочуть мати клієнтські модулі. І краще, щоб обидва пристрої були сумісні, і модуль міг працювати як на сервері, так і на браузері без змін.

Однак існує суттєве обмеження, яке робить специфікацію CommonJS незастосовною до браузерних оточень. Все ж код із попереднього розділу, якщо він запускається в браузері, виникне велика проблема



Другий рядок math.add(2, 3) виконується після першого рядка require('math'), тому він має чекати, поки math.js завантаження завершиться. Тобто, якщо час завантаження довгий, весь додаток зупиниться на цьому і чекає.

Це не є проблемою на стороні сервера, оскільки всі модулі зберігаються на локальному жорсткому диску і можуть завантажуватися синхронно, а час очікування дорівнює часу читання жорсткого диска. Однак для браузерів це велика проблема, оскільки модулі розміщені на стороні сервера, а час очікування залежить від швидкості Інтернету, що може займати багато часу, і браузер перебуває у стані «призупиненої смерті».


Тому браузерні модулі не можуть використовувати «синхронний», а лише «асинхронний». Це передумови народження специфікації AMD.

AMD — це скорочення від «Визначення асинхронного модуля», що означає «Визначення асинхронного модуля». Він завантажує модуль асинхронно, і навантаження модуля не впливає на роботу його наступних операторів. Усі оператори, що залежать від цього модуля, визначаються у функції зворотного виклику, яка не виконується до завершення завантаження.

Модулі мають бути визначені за допомогою конкретної функції define().


•ID: рядок, ім'я модуля (необов'язково)
•Залежності: є залежним модулем, який ми хочемо завантажити (опціонально), за допомогою відносного шляху. , зверніть увагу, що це формат масиву
•фабрика: фабричний метод, повертає функцію модуля
Якщо модуль не залежить від інших модулів, його можна визначити безпосередньо у функції define().


Якщо модуль також залежить від інших модулів, то першим аргументом функції define() має бути масив, що вказує на залежності модуля.



Коли функція require() завантажує вищезгаданий модуль, вона спочатку завантажить Lib.js файл.

AMD також використовує оператор require() для завантаження модуля, але, на відміну від CommonJS, він вимагає двох параметрів:

Перший параметр [модуль] — це масив, а члени в ньому — модулі, які потрібно завантажити; Другий зворотний виклик параметра — це функція зворотного виклику після успішного завантаження. Якщо переписати попередній код у формат AMD, він виглядає так:


math.add() не синхронізований із завантаженням математичного модуля, і браузер не призупиняє анімацію. Отже, очевидно, що AMD більше підходить для браузерного середовища.

Наразі існують дві основні бібліотеки Javascript, які реалізують специфікації AMD :require.js та curl.js.







Попередній:init: function (){}方法的写法原因
Наступний:【Практичний бій】Kibana 6.5.2 Китайський урок
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com