Node.js对象实例化是否为每个用户创建一个对象?

时间:2015-08-08 20:26:59

标签: javascript node.js rest instances

所以我正在this tutorial上学习如何在Node.js中创建一个RESTful API,其中一部分突然让我有点担心。在app中,实例化一个对象来处理名为TaskRepository()的RESTful请求。

根据与本教程相关的Gist,您会看到以下代码段:

var taskRepository = new TaskRepository();

我的问题是,这会为每个用户实例化一个TaskRepository()对象吗?在这种情况下,如果有足够高的流量,您是否有可能在内存中快速运行?

这里有什么最佳做法?

此外,如果是这种情况,您将如何以编程方式绕过它以避免未来的交通堵塞?

2 个答案:

答案 0 :(得分:2)

在该特定API中,有一个用于创建任务的API,它返回一个任务ID。该任务将存在,直到将来某个API调用引用该特定ID并使用删除操作。

每个服务器TaskRepository(为您的服务器创建一次),而不是每个用户。

这些任务并非特别针对每个用户,但是当您创建任务并将其返回给请求者时,只有该请求者可能知道该ID并使用它,尽管由于此示例不创建随机ID,它们是可预测的,所以任何人都可以引用特定的ID。

如果您在创建任务后没有删除任务,它们将随着时间的推移而累积。通常,这样的事情会产生某种不活动超时,并且如果在一段时间内(例如30分钟)没有使用它们,它会自动删除任务。

答案 1 :(得分:2)

在你联系的Gist的情况下,答案是否定的。设置服务器时会调用new TaskRepository()一次(紧接着创建var app = express,然后将共享一个实例并用于所有请求。

现在,如果您在路线(new TaskRepository())内拨打了app.get('stuff/etc', function () {})),那么您就是正确的。它将为每个HTTP请求创建一个新的TaskRepository实例。