Как правильнее для node js подключать модули?

Чтобы все модули(будь то контроллеры или модели) подключались динамически, как в php.То есть в зависимости от запроса. Или чтобы собирались при запуске все?
  • Вопрос задан
  • 1004 просмотра
Решения вопроса 4
AMar4enko
@AMar4enko
"Или чтобы собирались при запуске все"
В ноде ленивую загрузку библиотек не практикуют, насколько мне известно.
В PHP это вынужденная мера, потому что там чаще всего FastCGI, по одному запросу на процесс в один момент времени, процесс каждый раз инициализируется с нуля (опустим пока пляски с кэшем и прочее).
А сервер на ноде долгоживущий, поэтому там нет проблем потратить секунды три при старте на загрузку всего и вся.
Ответ написан
riky
@riky
Laravel
в пхп это больше вынужденная мера, чтобы лишнее не грузить на каждый запрос, но это и добавляет оферхэд на поиск классов каждый раз. в ноде процессы долгоживущие.
чтобы грузить автоматом все - через модуль fs сделайте поиск всех модулей в папке node_modules и делайте require - только помоему это плохая идея. переменные будут неявные - как минимум потеряете подсветку от IDE, если какой то модуль пропадет - ошибку получите не при запуске а когда будет обращение к нему.

если у вас много скриптов в которых вы прописываете много require то может сделать тдельный файл со списокм require и инклюдить везде его?
Ответ написан
PHP на каждый запрос загружает в память весь рабочий код (для каждого запроса отдельно). После завершения запроса процесс убивается и т.д.
Node.js загружает в память весь рабочий код один раз (во время запуска скрипта) и висит в памяти до завершения работы скрипта или до первой критической ошибки. Соответственно все запросы обрабатываются этим одним скриптом.
Ответ написан
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Почитайте этот вопрос и ответы на него: Как сделать возможность изменения кода приложений без перезагрузки основного приложения nodejs? Перегружать отдельные части приложения, даже если они не оформлены в модули при изменении их на винте можно при помощи fs.watch и require, предварительно удаляя их из кеша через delete require.cache[require.resolve('file-name')];
И у Вас очень опасная мысль развивается, отождествление модуля с контроллерами и моделями. Модуль не имеет ни какого касания к MVC, какие контроллеры, какие модели? Чтобы ощутить свю абсурдность этого подумайте про встроенные модули fs, http, stream и т.д. они контроллеры или модели? А внешние модули async, colors, request они контроллеры или модели? Почитайте habrahabr.ru/post/117791 и еще habrahabr.ru/post/204958
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы