Мой сервер meanjs запускается за 3-6 минут

Мое приложение mean.js основано на генераторе yoeman meanjs с некоторыми изменениями (например, разделение интерфейса и сервера, чтобы их можно было развертывать отдельно).

Я запускаю приложение с помощью fig (см. fig.yml ниже). Когда я устанавливаю команду «node server.js», запуск сервера занимает 6 секунд.

Когда я запускаю с помощью «grunt», который запускает nodemon и часы, это занимает около 6 минут. Я пробовал разные вещи, но не могу понять, почему nodemon заставляет вещи работать намного медленнее.

рис.yml:

web:
  build: .
  links:
   - db:mongo.local
  ports:
   - "3000:3000"
  volumes:
   - .:/home/abilitie
  command: grunt
  #command: node server.js # much faster but you don't get the restart stuff
  environment: 
   NODE_ENV: development
db:
  image: dockerfile/mongodb
  ports: 
   - "27017:27017"

Gruntfile (отрывок)

concurrent: {
    default: ['nodemon', 'watch'],
    old_default: ['nodemon', 'watch'],
    debug: ['nodemon:debug', 'watch', 'node-inspector'],
    options: {
        logConcurrentOutput: true,
        limit: 10
    }
},

jshint: {
    all: {
        src: watchFiles.serverJS,
        options: {
            jshintrc: true
        }
    }
},

grunt.registerTask('lint', ['jshint']);
// Default task(s).
grunt.registerTask('default', ['lint', 'concurrent:default']);

person Douglas Ferguson    schedule 30.01.2015    source источник


Ответы (2)


Это потому, что ваш первый подход просто запускает сервер Express с помощью $ node server.js. Но я не понимаю, почему для запуска требуется 6 секунд? Возможно у вас медленное железо...

Чтобы понять, почему второй подход занимает 6 минут, нужно понять, что grunt делает после запуска:

введите здесь описание изображения

  1. Сократите все эти файлы JavaScript

    serverJS: ['gruntfile.js', 'server.js', 'config/**/*.js']
    clientJS: ['public/js/*.js', 'public/modules/**/*.js']
    
  2. Запускает два параллельных процесса: watch и nodemon

    Если watch понятно (он следит за файлами из стеттинга и после их редактирования перезагружает сервер), что делает nodemon? Точнее, в чем разница между запуском сервера nodejs и nodemon.

Из официальной документации github:

nodemon будет следить за файлами в каталоге, в котором был запущен nodemon, и если какие-либо файлы изменятся, nodemon автоматически перезапустит ваше приложение node.

Если у вас есть файл package.json для вашего приложения, вы можете полностью опустить основной скрипт, и nodemon прочитает package.json для основного свойства и использует это значение в качестве приложения.

Он отслеживает все файлы из каталога node_modules, а в моей версии meanjs v0.4.0 это ~ 41 000 файлов. В вашем случае буферизация всех этих файлов занимает около 6 минут. Попробуйте добавить в свой gruntfile.js grunt.initConfig > nodemon > dev > option ignore

    nodemon: {
        dev: {
            script: 'server.js',
            options: {
                nodeArgs: ['--debug'],
                ext: 'js,html',
                watch: watchFiles.serverViews.concat(watchFiles.serverJS),
                ignore: 'node_modules/*' // or '/node_modules'
            }
        }
    },

Нужно точно определить, где проблема. Попробуйте запустить сервер тремя разными способами и замерьте время

  1. NODE_ENV=development nodejs server.js
  2. NODE_ENV=development nodemon server.js
  3. NODE_ENV=development nodemon server.js --ignore node_modules/
person khex    schedule 30.01.2015
comment
Я удалил все, кроме ресурсов сервера, и у меня есть только 1 представление. Таким образом, всего 6 файлов. Моя текущая гипотеза — медленная VBoxFS. В настоящее время я изучаю использование NFS. - person Douglas Ferguson; 30.01.2015

NFS спас положение.

Общая папка VirtualBox очень медленная. Использование этого бродячего образа вместо boot2docker намного быстрее.

https://vagrantcloud.com/yungsang/boxes/boot2docker

Также обязательно отключите UDP, иначе NFS может зависнуть. Вы можете сделать это, поместив это в свой Vagrantfile:

config.vm.synced_folder ".", "/vagrant", type: "nfs", nfs_udp: false

person Douglas Ferguson    schedule 31.01.2015
comment
Также... обязательно отключите udp, иначе nfs может зависнуть... config.vm.synced_folder., /vagrant, type: nfs, nfs_udp: false - person Douglas Ferguson; 31.01.2015