node.js - 检查 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 时,我通常会看到人们使用process.env
. 读取时process.env.NODE_ENV
,Node 将执行系统调用以从操作系统读取环境变量(NODE_ENV
在本例中)。这是一个有点昂贵的操作,可能会导致热点中的性能问题。一种解决方案是缓存该值,以便代码直接从局部变量而不是操作系统读取该值。
但是,您似乎已经在使用缓存值。如果我们查看Express 源代码,我们可以看到它分配process.env.NODE_ENV
给env
,这就是您正在阅读的内容req.app.get('env')
。因此,据我所知,这是出于所有实际目的免费阅读。我不会担心让 Heroku 对其进行硬编码,无论如何这可能是不可能的。
推荐阅读
- reactjs - 在 ReactJS 中使用 Context 时如何将单个道具值传递给同一个组件
- xml - 按子节点内容对 XML 进行排序
- python-3.x - python中的ANOVA特征选择
- python - 如何在异常发生后立即停止执行函数?[Python]
- bash - 通过 STDIN 发送脚本和文件内容
- git - 无法删除具有特殊字符的 Git 标签
- python - 如何在python中的json数据中传递字符串变量
- css - 如何删除输入字段周围的轮廓?
- mysql - 插入 Mysql 表时防止 Json 排序
- php - whm/cpanel/wordpress 中的 Mod_security 问题