2011-10-23 6 views
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 

を、あなたは最後の行に見ることができる、私は、スクリプトの非同期の高価な部分を作りました。私はそれを実行したときに

はしかし、それは2つのだけ質問して利用できるCPU容量の12%を使用しています。

  1. は私がいない場合は、逆さまどこに
  2. それは間違っているのだろうか?
+0

内部スレッドプール(Linuxの場合)またはWindowsのIOCPを使用する必要があります。しかし、はい、V8のJavaScriptコードは1つのスレッドにしかありません。 – Raynos

答えて

1

私はあなたの理解がオフではないと思いますが、この例ではあまり大きな面はありません。 Uglify/js minificationは、CPUの束縛(パース、天体操作など)が多すぎるため、ノードがこれらの操作を効果的に連続して実行することが期待されます。

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

ビルドスクリプトではほとんど問題はありませんが、本当にこれを最適に実行するには、すべてのIO(この場合はファイルを読み込む)が非同期で実行されていることを確認して、バンドルは並行して実行できます。

関連する問題