Правильно ли мое концептуальное недопонимание асинхронности узлов?

Я играю с Node.js в качестве драйвера для оптимизации JavaScript во время сборки.

У меня есть следующий файл Джейка:

fs = require("fs")
uglify = require("uglify-js")
desc "Uglify JS"

bundles =
    edit: [ "jquery",.... ]
    login: [ ... ]
    directory: [ .... ]

all = {}
task "minify", [], (params) ->
  files = bundles.edit
  for name,files of bundles
    all[name] = ""
    files.forEach (file, i) ->
        file = file + ".js"
        all[name] += fs.readFileSync("Src/Scripts/" + file).toString()  if file.match(/^.*js$/)
        cbgen = (data) -> 
            (err, out) ->
                    ast = uglify.parser.parse(data)
                    ast = uglify.uglify.ast_mangle(ast)
                    ast = uglify.uglify.ast_squeeze(ast)
                    fs.write out, uglify.uglify.gen_code(ast), 0, null, null, (e,w) ->
        cb = cbgen all[name]
        fs.open "Src/Scripts/" + name + ".min.js", "w+", 0666, cb # async methods

и вы можете видеть в последней строке, я сделал дорогую часть сценария асинхронной.

Но когда я запускаю его, он использует только 12% доступной мощности процессора, поэтому два вопроса:

  1. Я делаю это неправильно
  2. Если нет, то в чем ее преимущество?

1 ответ

Решение

Я не думаю, что ваше понимание нарушено, в этом примере не так уж много положительного. Uglify/js minification сильно зависит от процессора (синтаксический анализ, манипулирование ast и т. Д.), Поэтому я ожидаю, что узел будет эффективно выполнять эти операции последовательно.

Если не ждать, узел будет использовать 100% ЦП, который был выделен. Если вы видите, что он использует около 12%, то ваша машина, вероятно, имеет восемь ядер, и Node занимает одно из них.

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

Другие вопросы по тегам