【问题标题】:Does checking for NODE_ENV unnecessarily slow down our Express app in production?检查 NODE_ENV 是否会不必要地减慢我们在生产中的 Express 应用程序的速度?
【发布时间】:2020-10-20 15:14:21
【问题描述】:

在 Express 应用中,我们经常像这样检查环境:

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

在我看来,这意味着即使在生产中每次出现错误时,应用程序都会使用以下方法检查环境:

req.app.get('env') === 'development'

我是否遗漏了什么,或者这个检查完全没有必要?我们可以为 Express 应用程序构建一个步骤,在部署之前解决这些检查。这是像 Heroku 这样的 PaaS 已经为我们做的事情吗?

【问题讨论】:

    标签: node.js express heroku environment-variables


    【解决方案1】:

    在处理 Node 时,我通常会看到人们使用process.env 读取环境变量。当读取process.env.NODE_ENV 时,Node 将执行系统调用以从操作系统(本例中为NODE_ENV)读取环境变量。这是一个有点昂贵的操作,可能会导致热点中的性能问题。一种解决方案是缓存值,以便代码直接从局部变量而不是操作系统读取值。

    但是,您似乎已经在使用缓存值。如果我们查看Express source code,我们可以看到它将process.env.NODE_ENV 分配给env,这就是您使用req.app.get('env') 阅读的内容。因此,据我所知,这是出于所有实际目的免费阅读。我不会担心让 Heroku 对其进行硬编码,这可能是不可能开箱即用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 2014-09-28
      • 1970-01-01
      相关资源
      最近更新 更多