0

我的 mean.js 应用程序基于 yoeman meanjs 生成器,并进行了一些调整(例如,将前端和后端分开,以便它们可以单独部署)。

我正在使用 fig 启动应用程序(参见下面的 fig.yml)。当我将命令设置为“node server.js”时,服务器需要 6 秒才能启动。

当我使用运行 nodemon 和 watch 的“grunt”启动时,大约需要 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']);
4

2 回答 2

1

这是因为您的第一种方法只是通过$ node server.js运行 Express 服务器。但我不明白为什么我需要 6 秒才能启动?也许你的硬件很慢......

为了理解为什么第二种方法需要 6 分钟,您需要了解grunt启动后的操作:

在此处输入图像描述

  1. 整理所有这些 JavaScript 文件

    serverJS: ['gruntfile.js', 'server.js', 'config/**/*.js']
    clientJS: ['public/js/*.js', 'public/modules/**/*.js']
    
  2. 启动两个并行进程:watch&nodemon

    如果watch很清楚(它从 stett 监视文件并在编辑它们后重新启动服务器)做什么nodemonnodejs更准确地说,通过和启动服务器有什么区别nodemon

来自官方github 文档

nodemon 将监视启动 nodemon 的目录中的文件,如果有任何文件更改,nodemon 将自动重新启动您的节点应用程序。

如果您的应用程序有package.json文件,则可以完全省略主脚本,nodemon 将读取 main 属性的 package.json 并将该值用作应用程序。

它正在监视node_modules目录中的所有文件,在我的 meanjs v0.4.0 中,它的 ~41,000 个文件。在您的情况下,缓冲所有这些文件大约需要 6 分钟。尝试添加到您的gruntfile.jsgrunt.initConfig > nodemon > dev > 选项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/
于 2015-01-30T16:10:42.910 回答
0

NFS 挽救了这一天。

VirtualBox 共享文件夹超级慢。使用这个 vagrant image 而不是 boot2docker 会快得多。

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

另外,请确保禁用 UDP,否则 NFS 可能会挂起。你可以把它放在你的 Vagrantfile 中:

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

于 2015-01-31T17:11:59.587 回答