我想知道什么是最好的对象实例化方式,以及我所做的操作对垃圾回收器的影响如何。
以以下代码为例:
const MyClass = require('../controllers/myClassController');
const router = require('express').Router();
router.get('/', (req, res) => {
console.log('GET request at api/someEndPoint');
const myClass = new MyClass();
myClass.doSomePromise()
.then(() => {
res.end();
})
.catch((err) => {
res.status(500).end();
});
});
在这里,对象是在路由路径实现的内部实例化的。
现在,以这个为例:
const MyClass = require('../controllers/myClassController');
const router = require('express').Router();
const myClass = new MyClass();
router.get('/', (req, res) => {
console.log('GET request at api/someEndPoint');
myClass.doSomePromise()
.then(() => {
res.end();
})
.catch((err) => {
res.status(500).end();
});
});
在这里,对象是在路由路径实现之外实例化的。在我看来,这将会持续到应用程序的生命周期,而第一个示例中,变量
myClass
将被清除。所以,我的疑问是:
1. 我的想法对吗? 2. 为什么我要选择其中一种方法?如果我选择第二种方法,似乎我可以直接在类本身上创建
static
方法...
3. 每种方法的优缺点是什么?我觉得自己在脑海中斗争的是,事情没有被正确地清理,其中一种方法比另一种方法更好,涉及到流量大小、避免竞态条件等问题!