0

ビルド時のJavaScript最適化のドライバーとしてNode.jsをいじっています。

私は次のジェイクファイルを持っています:

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

最後の行でわかるように、スクリプトの高価な部分を非同期にしました。

しかし、実行すると、使用可能なCPU容量の12%しか使用しないため、2つの質問があります。

  1. 私はそれを間違っていますか
  2. そうでない場合、利点はどこにありますか?
4

1 に答える 1

1

私はあなたの理解がずれているとは思いません、この例にはあまり良い面はありません。Uglify / jsの縮小化は、CPUに大きく依存しているため(解析、ast操作など)、ノードがこれらの操作を効果的にシリアルに実行することを期待しています。

待機していない場合、ノードは割り当てられたCPUを100%使用します。約12%の使用率が見られる場合は、マシンに8つのコアがあり、ノードがそのうちの1つを占有している可能性があります。

ビルドスクリプトにはおそらくほとんど意味がありませんが、これを本当に最適に実行したい場合は、すべてのIO(この場合はファイルの読み取り)が非同期で実行されていることを確認し、個別のプロセスを生成して醜化を実行し、各バンドルを実行できるようにします。並行して。

于 2011-10-23T19:46:00.190 に答える