我对节点异步的概念误解是错误的吗?

时间:2011-10-23 02:37:08

标签: node.js asynchronous jake uglifyjs

我正在使用Node.js作为构建时javascript优化的驱动程序。

我有以下Jake文件:

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%的可用CPU容量,因此有两个问题:

  1. 我做错了吗
  2. 如果没有,哪里有好处?

1 个答案:

答案 0 :(得分:1)

我不认为你的理解是不对的,在这个例子中没有太大的好处。 Uglify / js minification在很大程度上受CPU限制(解析,操作等等......)所以我希望node能够有效地连续运行这些操作。

如果没有等待,Node将使用已分配的100%的CPU。如果你看到它使用大约12%,那么你的机器可能有8个核心,而节点占用其中一个核心。

构建脚本可能没什么意义但是如果你真的希望以最佳方式运行,你可以确保所有IO(在这种情况下读取文件)都是异步完成的,并产生一个单独的进程来执行uglification以便每个bundle可以并行完成。

相关问题