2014-01-15 6 views
7

私は、プロジェクトのビルドをしているのですが、レールのAPIバックエンドと対話しています。yeomanのアプリケーションでは、タスクが遅い

無駄な作業が非常に遅いことを除いて、すべてうまく動作します。

私はgrunt server --verboseを実行します。

Execution Time (2014-01-15 13:37:55 UTC) 
loading tasks   14.3s ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 26% 
server     1ms 0% 
preprocess:multifile 11ms 0% 
clean:server   13ms 0% 
concurrent:server  34.3s ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 63% 
autoprefixer   1ms 0% 
autoprefixer:dist  369ms ▇ 1% 
connect:livereload  17ms 0% 
watch     5.8s ▇▇▇▇▇▇▇▇▇ 11% 
Total 54.8s 

私Gruntfileのいくつか:プロジェクトの

'use strict'; 
module.exports = function (grunt) { 
    require('time-grunt')(grunt); 
    require('load-grunt-tasks')(grunt); 
    require('time-grunt')(grunt); 

    grunt.initConfig({ 
    ... 
    }); 

grunt.loadNpmTasks('grunt-preprocess'); 

    grunt.registerTask('server', function (target) { 
    if (target === 'dist') { 
     return grunt.task.run(['build', 'connect:dist:keepalive']); 
    } 

    grunt.task.run([ 
     'preprocess:multifile', 
     'clean:server', 
     'concurrent:server', 
     'autoprefixer', 
     'connect:livereload', 
     'watch' 
    ]); 
    }); 

    grunt.registerTask('test', [ 
    'clean:server', 
    'concurrent:test', 
    'autoprefixer', 
    'connect:test' 
    //'karma' 
    ]); 

    grunt.registerTask('build', [ 
    'preprocess:multifile', 
    'clean:dist', 
    'useminPrepare', 
    'concurrent:dist', 
    'autoprefixer', 
    'concat', 
    'copy:dist', 
    'cdnify', 
    'ngmin', 
    'cssmin', 
    'uglify', 
    'rev', 
    'usemin' 
    ]); 

    grunt.registerTask('default', [ 
    'jshint', 
    'test', 
    'build' 
    ]); 

}; 

はサイズ:

[email protected] ~code/myapp/app/scripts 
$> find -name "*.js" | xargs cat | wc -l 
10209 

私はi7プロセッサー、16ギガバイトとMacOSの10.8上で実行していますラム、SSD ...そんなに長い時間がかかるのは正常ですか?無駄な仕事(とくに「ローディング・タスク」)が遅いのはなぜですか?

注:私は迷惑メールマシーンの中でsshして、そこからコマンドを実行しています。私のネイティブシステムでgruntコマンドを実行すると、はるかに高速になります(loading tasksは14.3ではなく1.6秒かかります)。

共有ファイルシステムに問題がある可能性があります。しかし、なぜ...

+0

私は同じ問題を抱えています。 imageminが永遠にかかるように見える( '' 'grunt serve --verbose --debug'''これを公開する)。あなたは解決策を考案しましたか? – sampoh

答えて

4

私はバグのバーチャルボックスの中ではじけを使用しています。 (ubuntu 12.04)。私のネイティブファイルは私のホストマシン(OSx)にあります。無駄な作業は集中的に行われ、ファイル共有によって実行されるため、処理が非常に遅くなります。

これは、Vagrant(http://docs.vagrantup.com/v2/synced-folders/nfs.html)にnfsを追加することで改善できます。これにより、デフォルトのVagrantファイル共有の代わりに、Vagrantの共有ファイルがnfsになります。それは少し速くなりますが、それほど多くはありません。 NFSと1.2秒

  • サブタスクネイティブloading grunt tasks

    • 実行している場合:比較のために、私のマシン上

      4Sを

    • 放浪ファイル共有:16S

    特定のタスクのみが長時間かかる場合は、この特定のタスクが問題になる可能性があります。トラブルシューティングを行うには、https://npmjs.org/package/time-gruntを使用してください。

  • +0

    @pinouchonありがとうございました。これはまさに私が持っていた問題であり、あなたのソリューションは助けになりました。上がる。 – Donovan

    5

    私はVagrantとYeomansの角発電機で全く同じ問題がありました。 grunt serveの実行後、サーバーを再コンパイルするのに30秒かかった。

    私はすでにNFSを使用していたが、まだ遅かった。それから私はjit-grunt、ジャストインタイムグラントローダーを試しました。私はload-grunt-tasksをjit-gruntに置き換えました。 https://medium.com/written-in-code/ced193c2900b

    2

    私は同様の問題を持っていた、と見ています:

    ここでJIT-うなり声の良い記事です

    nospawn: true 
    

    は最速のオプションにするには。私は20歳から1歳になって、JSを連結し、縮小し、醜めにしました。

    +0

    これです。私の場合は、ブラウザウォッチタスクを実行していましたが、これは変更を再コンパイルするのに7秒かかるでしょう。 watch(browserify)のオプションセクションにこれを追加した後( "spawn:false")、1秒になりました。 –

    2

    私はYeomanのngbpジェネレータとVagrantで同じ問題がありました。 nfsの場合でも、テンプレートの変更はブラウザで約30秒かかりました。

    jit-gruntを使用すると、時間が10秒に短縮されます。 spawn:falseを使用した後、最初の負荷での減少がなくても、変更は1秒(0.086秒)未満でブラウザに伝播しました! (はい!)

    私はGruntfile.jsに行った変更:

    1. 私は[それが原因でタスク名の変更のだすべてgrunt.loadNpmTasksけどgrunt.loadNpmTasks( '作男-のcontrib-時計を')コメントngbpは後で];
    2. 私はを追加しました。require( 'jit-grunt')(grunt); grunt.loadNpmTasksの後の( 'grunt-contrib-watch');
    3. 私は産卵追加:偽にデルタ:{オプション:{livereload:真、産卵:偽} ...}を。
    +0

    これを変更すると、私は34秒から259msまでファイルが小さくなりました....それはまさにINSANEです。 –

    関連する問題