2014-01-15 2 views
7

У меня есть проект с угловым проектом с йоменом, разговаривающий с рельсами api backend.Задачи на грунт медленны в приложении yoman

Все работает нормально, за исключением того, что задачи сжимания очень медленные.

Когда я бегу 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 

Я бегу на MacOS 10.8 с процессором i7, 16GB ram, SSD ... Это нормально, что так долго? Что заставляет задачу хрюкать (и особенно «загружать задачи») так медленно?

Примечание: Я нахожусь в машине с бродягой и управляю командами отряда. Если я запустил команду grunt в моей родной системе, она намного быстрее (loading tasks занимает 1.6s вместо 14.3).

Таким образом, общая файловая система может быть проблемой. Но почему ...

+0

У меня такая же проблема. Кажется, что imagemin берет навсегда ('' 'grunt serve --verbose --debug'' 'выставлял это). Вы придумали решение? – sampoh

ответ

4

Я использую grunt внутри виртуального бокса Vagrant. (ubuntu 12.04). Мои собственные файлы находятся на моей главной машине (OSx). Поскольку задачи grunt являются io-интенсивными, и они запускаются через общий доступ к файлам, это делает их довольно медленными.

Это может быть улучшено путем добавления nfs к Vagrant (http://docs.vagrantup.com/v2/synced-folders/nfs.html). Это заставит Vagrant обмениваться файлами с nfs вместо общего обмена файлами Vagrant по умолчанию. Это будет немного быстрее, но не намного.

Для сравнения, на моей машине:

Для запуска подзадачи loading grunt tasks

  • изначально: 1.2s
  • с NFS: 4s
  • бродяга файлообменник: 16s

Если только конкретная задача занимает много времени, эта задача может быть проблемой. Чтобы устранить неполадки, используйте time-grunt: https://npmjs.org/package/time-grunt.

+0

Спасибо @pinouchon. Это именно та проблема, с которой я столкнулся, и ваше решение помогло. Upping. – Donovan

5

У меня была такая же проблема с угловым генератором Vagrant и Yeomans. После запуска grunt serve потребовалось почти 30 секунд, чтобы скомпилировать sass, перезапустить сервер и т. Д.

Я уже использовал NFS, но он все еще был медленным. Затем я попробовал jit-grunt, разгрузочный загрузчик точно в срок. Я заменил load-grunt-tasks на jit-grunt, и теперь все намного быстрее.

Вот хорошая статья о JIT-Грунта: https://medium.com/written-in-code/ced193c2900b

2

У меня были проблемы, а также, и обнаружили:

nospawn: true 

Чтобы быть самым быстрым вариантом. Я пошел от ~ 20 до ~ 1 с, чтобы конкат, минимизировать и угадать JS.

+0

Это. В моем случае у меня была запущена задача просмотра браузера, для перекомпиляции которой потребовалось бы 7 секунд. После добавления этого (ну, «spawn: false») в раздел опций watch: browsify, он опустился до 1 секунды. –

2

У меня была такая же проблема с генератором ngbp Yeoman и Vagrant. Даже с nfs, простые изменения в шаблоне занимали около 30 секунд, которые можно увидеть в браузере.

Использование jit-grunt привело к сокращению времени до 10 с. После использования spawn: false, несмотря на то, что при первом загрузке не было уменьшения, изменения потребовали меньше 1 с (0,086) для распространения в браузере! (Да!)

Изменения, которые я сделал в Gruntfile.js:

  1. Я заметил все grunt.loadNpmTasks но grunt.loadNpmTasks («хрюкать-вно-часы») [Это из-за задачи переименования ngbp делает позже];
  2. Я добавил require ('jit-grunt') (grunt); после grunt.loadNpmTasks ('grunt-contrib-watch');
  3. Я добавил икры: ложные к дельте: {опции: {LiveReload: правда, икру: ложный} ...}.
+0

Сменив это, я отправился с 34 секунд для файла с меньшим размером файла до 259 мс ... Это просто ИНСАН. –

Смежные вопросы