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

Имеет ли смысл модифицировать код, используемый в NodeJS?

Мне было интересно, так как Clojure Компилятор и UglifyJS не только оптимизируют код для размера, но и для производительности (хотя я думаю, что размер является основным приоритетом), сможет ли мое приложение node.js работать быстрее, если оно было уменьшено? Я знаю, что это может зависеть от приложения, но я прошу об этом вообще.

4b9b3361

Ответ 1

В node основной стоимостью обработки являются операции ввода-вывода, а не сам JavaScript. Так, например:

fs.readFile(myFile, function (err, data) {
    processTheFile(data);
});

Здесь пробел между вызовом readFile и вызываемым обратным вызовом будет в несколько раз длиннее времени, в течение которого выполняется обратный вызов. (Если это наоборот, вы, вероятно, не должны использовать node.)

Таким образом, оптимизация функции processTheFile для скорости бессмысленна, потому что вы сохраняете небольшой процент очень маленького числа.

Ответ 2

Минификация может улучшить производительность.

Оптимизирующий компилятор Node V8 встраивает функции в соответствии с некоторыми эвристиками. Минификация влияет на эти эвристики. Это может вызвать встраивание ранее не встроенных функций. Поскольку встроенные функции обычно работают быстрее, это может привести к повышению производительности.

Узел 9. 0+/V8 6. 2+ (Турбофан) - незначительные улучшения производительности

Если размер неоптимизированного байт-кода функции меньше 500, он будет встроен. Минификация обычно уменьшает количество узлов AST (абстрактного синтаксического дерева). Поскольку байт-код генерируется напрямую из AST, мы также можем ожидать некоторого уменьшения размера байт-кода.

Источник: [Turbofan] Используйте размер байт-кода для встраивания эвристики.

Узел 8. 3+/V8 5. 9+ (Турбофан) → незначительные улучшения производительности

Если количество узлов функции AST меньше 196, оно будет встроено. Минификация обычно уменьшает количество узлов AST.

Источник: [turbofan] Не принимайте во внимание размер источника для встроенной эвристики.

Узел 8.2 и до /V8 5.8 (коленчатый вал) и до → значительные улучшения производительности

Если количество символов функции, включая пробелы и комментарии, меньше 600, оно будет встроено.

Допустим, у нас есть функция длиной более 600 символов:

function f() {
  // A long comment... bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
  return 1;
}

Минификация сводит это к function f(){return 1}.

Если мы теперь вызываем оба варианта n раз и сравниваем производительность функции raw и minified, мы получим следующий результат:

Raw vs minified performance

Очевидно, минимизированная функция выполняет более чем в два раза быстрее.

Смотрите также: #NodeJS: быстрый совет по оптимизации

Ответ 5

Я создал nodejs cli, который генерирует новое приложение с некоторыми предопределенными классами. Я думаю, что в этом случае имеет смысл минимизировать базовый код. Потому что вы хотите разрешить разработчику использовать его, но не изменять его (или, по крайней мере, сделать это очень сложно). Таким образом, я буду подталкивать разработчика к загрузке новой версии, а не обновлять класс в приложении.