каковы преимущества использования модулей AMD, таких как requirejs или commonjs, в javascript?

Я прочитал много статей о решениях AMD, таких как RequireJS или загрузчики модулей, которые следуют стилю CommonJS в Javascript.

Скажем, у меня есть приложение, разделенное на следующие части:

  • Определение приложения, основанное на используемой мной платформе
  • Модель 1, основанная на определении и структуре приложения
  • Модель 2, основанная на определении приложения, Модель 1 и моя структура

Я могу написать каждую часть как модуль RequireJS или общий модуль JS и разделить свой проект на количество файлов, которое я хочу, но в чем преимущество записи каждой части как модуля или разделения их на множество файлов, а затем загружать их в правильном порядке ( чтобы избежать проблем с зависимостями), возможно, объединить все файлы в один, чтобы уменьшить количество HTTP-запросов (как это делает оптимизатор r.js)?


person Matteo Pagliazzi    schedule 18.08.2012    source источник


Ответы (1)


На мой взгляд, есть три достаточно важных причины:

Вы можете создавать и повторно использовать модули, не загрязняя глобальное пространство имен. Чем более загрязнено ваше глобальное пространство имен, тем больше вероятность столкновения функции / переменной. Это означает, что вы определяете функцию с именем «foo», а другой разработчик определяет функцию «foo» = одна из функций перезаписывается.

Вы можете структурировать свой код в отдельные папки и файлы, и requirejs будет загружать их асинхронно, когда это необходимо, так что все просто работает.

Вы можете создавать для производства. RequireJS поставляется с собственным инструментом сборки под названием R.JS, который объединит и упростит ваши модули javascript в один (или несколько) пакетов. Это повысит скорость вашей страницы, так как пользователю придется делать меньше вызовов скриптов и загружать меньше контента (поскольку ваш JS утерян).

Вы можете взглянуть на этот простой демонстрационный проект: https://c9.io/peeter-tomberg/requirejs (в cloud9ide).

Чтобы собрать ваши модули в одно приложение, все, что вам нужно сделать, это установить пакет requirejs npm и выполнить команду: r.js -o build / build.properties.js

Если есть вопросы, задавайте их.

Изменить:

В процессе разработки размещение всех модулей в отдельных файлах - это просто хороший способ структурировать код и управлять им. Это также поможет вам в отладке (например, ошибка в «Module.js line 17» вместо «scripts.js line 5373»).

Для производства вы должны использовать инструмент сборки, чтобы объединить и преобразовать javascript в один файл. Это поможет быстрее загружать страницу, поскольку вы делаете меньше запросов. Каждый ваш запрос на загрузку замедляет вашу страницу. Чем медленнее ваша страница, тем меньше очков дает вам Google. Чем медленнее страница, тем больше разочаровываются ваши пользователи. Чем медленнее ваша страница, тем меньше у вас будет продаж.

Если вы хотите узнать больше о производительности веб-страниц, посетите http://developer.yahoo.com/performance/rules.html

person Peeter    schedule 19.08.2012
comment
Спасибо, так как я единственный разработчик, и риск перезаписи функции практически невозможен (и я не понимаю, как requirejs может избежать коллизий) Единственное, что мне нужно, это способ разделить мой проект на несколько файлов, и я можно сделать это, просто объединив их все в один файл с сохранением правильного порядка. Может ли в этом случае быть полезным requirejs или аналогичный? - person Matteo Pagliazzi; 19.08.2012
comment
Вы видели ваш проект, в чем разница между разделением проекта на несколько файлов и последующей загрузкой только одного, который объединяет все остальные в правильном порядке, и использованием requirejs? - person Matteo Pagliazzi; 19.08.2012
comment
Не могли бы вы перефразировать свой вопрос, я не понимаю. - person Peeter; 19.08.2012
comment
я думаю, я не очень ясно выразился. Я знаю о производительности, запросах и разделении файлов, но какая разница между разделением многих файлов, а затем объединением их в производство БЕЗ использования requirejs или других модулей и использования загрузчика модуля, такого как requirejs, за исключением управления зависимостями, но для этого в моем случае достаточно загрузить каждая часть моего приложения в правильном порядке - person Matteo Pagliazzi; 19.08.2012
comment
Мне кажется, вы пытаетесь изобрести велосипед. Если вы пишете небольшое приложение, вы можете просто объединить файлы самостоятельно (вручную или с помощью небольшого скрипта). Он будет работать, но по мере роста вашего приложения вы больше не сможете им управлять. Я пошел по этому пути, и поддерживать этот код ужасно. - person Peeter; 19.08.2012