2015-04-25 3 views
2

В браузере DOM анализируется, и скрипты загружаются и анализируются в том порядке, в котором они определены.Как Node.js загружает скрипты в память?

В Node.js, как загружаются скрипты в память?

Является ли весь график сценариев, определяемых операторами require в каждом файле, пройденным во время инициализации, с результирующими объектами и значениями, угашающими стек и кучу, готовыми к запуску?

+1

Нет. Как это могло быть пройдено во время инициализации, прежде чем все начнет просить другие вещи? Думаю об этом. –

+1

'require' - динамически выполняемая функция, она не подвергается статически анализу. [Читать исходный код] (https://github.com/joyent/node/blob/master/lib/module.js)! – Bergi

+1

См. Также [это подробное разбиение] (http://stackoverflow.com/a/28955050/1048572) о том, как загружаются модули. – Bergi

ответ

4

Синхронно. Всякий раз, когда он встречает require, он синхронно загружает скрипт и запускает его, а затем, когда обнаруживаются другие скрипты, он синхронно загружает их.

IIRC в течение 0,2 дней была асинхронной версией, но ее здесь нет в течение длительного времени. Что касается того, что он на самом деле делает:

В целом, то, что он делает, это fs.readFileSync.

Более конкретно - Вызов require вызовы _load, которые, в свою очередь первый checks the cache, а затем он creates the module и calls the relevant extension. Поскольку допустимы множественные расширения (например, .json), он загружает каждый по-другому, в случае .js, который является обычным случаем, он просто вызывает fs.readFileSync, а затем compiles it (который включает в себя его упаковку, экспорт инъекций и запуск).

+0

Правильно ли говорить на высоком уровне, как только скрипт будет извлечен, он будет втянут в кеш, проанализированный средой JavaScript, в абстрактное синтаксическое дерево; который затем оценивается, что приводит к гидратации структур данных во время выполнения (стек и куча). – Ben

+1

@BenAston да, но слишком описательный, достаточно сказать, что он загружен, проанализирован, кэширован и выполнен. –

+0

В моем описании подразумеваются действия, которые не происходят? – Ben

Смежные вопросы