首页 > 解决方案 > 检查 NODE_ENV 是否会不必要地减慢我们在生产中的 Express 应用程序?

问题描述

在 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.jsexpressherokuenvironment-variables

解决方案


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

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


推荐阅读