Подтвердить что ты не робот

Возможно ли, что комментарии от NodeJS script создают проблемы с памятью?

Я пишу библиотеки NodeJS, и я обычно помещаю комментарии JSDoc в код, создавая документацию.

Итак, мой код выглядит так:

/**
 * Sum
 * Calculates the sum of two numbers.
 *
 * @name Sum
 * @function
 * @param {Number} a The first number,
 * @param {Number} b The second number.
 * @return {Number} The sum of the two numbers.
 */
module.exports = function (a, b) {
    return a + b;
};

Если этот script потребуется от другого узла NodeJS script, будет ли загружен комментарий в ОЗУ?

Значит, большие комментарии влияют на память как-то?

Я предполагаю, что скрипты NodeJS разобраны, а нерелевантные вещи (например, комментарии) не хранятся в памяти. Это правда?

Итак, в заключение, могут ли такие комментарии создавать какие-либо проблемы с памятью?


Примеры

Строгая функцию, комментарий также напечатан:

function foo () {
    // Hello World comment
    return 10;
}

console.log(foo.toString());

Вывод:

$ node index.js 
function foo() {
    // Hello World comment
    return 10;
}

Другим примером является генерация lorem ipsum на 2 миллиона строк, а затем в последней строке console.log(1).

Итак, файл выглядит так:

 // long lorem ipsum on each line
 // ...
 // after 2 million lines
 console.log(1)

Запуск script выше:

$ node run.js 
FATAL ERROR: CALL_AND_RETRY_0 Allocation failed - process out of memory
Aborted (core dumped)

Это произошло на машине с 16 ГБ оперативной памяти.


Я также сравнил производительность простого файла console.log(1) с тем, у которого много комментариев:

$ time node with-comments.js
1

real    0m0.178s
user    0m0.159s
sys 0m0.023s

$ time node no-comments.js
1

real    0m0.040s
user    0m0.036s
sys 0m0.004s
4b9b3361

Ответ 1

Как ваш код .toString() просует, все комментарии хранятся в памяти как часть исходного кода функции, которая в модулях node вне функции является функцией модуля. Вы можете отключить комментарии на шаге сборки.

V8 сохраняет источник в памяти, потому что он является самым компактным представлением функции, AST и другие промежуточные представления создаются "на ходу" по мере необходимости, а затем отбрасываются.