首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Node.js中实现消耗较少内存的模型层?

问如何在Node.js中实现消耗较少内存的模型层?
EN

Stack Overflow用户
提问于 2015-10-09 02:32:49
回答 1查看 728关注 0票数 0

您知道在Node.js中实现消耗较少内存的模型层的最佳方法吗?我认为有以下几种选择:

  1. 一个类(业务对象)的唯一实例,它有一系列方法来创建、更新、删除、读取某个实体等。 // UserModel.js var User =函数(){ this.create =函数(数据,回调){};this.delete =函数(id,回调){};this.read =函数(id,回调){};this.update =函数(id,数据,回调){};this.list =函数(数据,回调){};} module.exports =新用户();// UserController.js用户=需要(‘UserModel’);User.create({用户名:'xxx',密码:'yyy‘},函数(err,user){ });
  2. 具有许多实例的通用方法的类: // UserModel.js var User =function( this.data =data){this.data= data;this.save =function(回调){};this.update =function(回调){};this.delete =function(回调){};} User.prototype.list = function(){};User.prototype.getById = function(){};module.exports = User;// UserController.js var User = require('UserModel');var user =新用户({ username:'xxx',密码:'yyy‘});user.save(函数(Err){//. });

我对内存消耗表示怀疑,因为在第一种方法中,只有一个类的实例可以处理跨控制层和数据库的数据;而在第二种方法中,可能会出现同一类的许多实例(同时有100个用户注册),尽管一个好处可能是更全面的OOP。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-09 05:33:51

我不明白你的第一个提议。您正在将一个对象实例传递给module.exports。如果对象不需要多个实例,则不需要构造函数。您可能应该定义一些类似于

代码语言:javascript
复制
var UserModel = {
   create: function(){},
   read: function(){},
   update: function(){},
   delete: function(){},
   list: function(){}
}

module.exports = UserModel;

声明一个函数占用内存,尽管数量微不足道。但是更重要的是,在这个场景中有一个构造函数是没有意义的,而且如果我为您的代码做出贡献,我可能会为了理智而修改它。

至于第二个命题,使用带有构造函数的对象并使用new关键字为您创建的每个文档创建实例肯定更常见。但是,它可能会消耗更多的内存,因为您正在创建同一个对象的许多实例。例如,您接收JSON,将其解析为一个对象,然后将该对象传递给构造函数,从而从模型和文档构造一个具有继承方法和属性的实例。尽管如此,这是可以忽略不计的内存增加,因为JavaScript是通过引用传递的。

我不明白为什么在这种情况下您会关心内存的使用。在这种情况下,您不太可能做很多事情来大幅度减少内存消耗。最终,完全无视OOP而只创建过程代码可能是最具性能的,尽管这是非常难以管理的--它的内存占用可能最小。尽管这正是我的观点,但您可能应该写出最有意义的东西,而不是消耗最少内存的东西。为了减少内存占用而做的任何小改动,从长远来看都可能会产生反效果,因为对象实际上并不占用那么多内存。

100个用户每人传递30字节的用户名和密码,等于10 to (标题和JSON中的其他字符)。如果您正在使用内存较少的系统,那么您可能应该考虑使用一种可以显式管理内存并具有静态类型(C、C++、Java)的语言。更不用说nodejs的并发模型了,并不意味着100个请求同时传入,nodejs将同时处理这100个请求,其中一些请求可能会在其他请求开始处理之前响应并被垃圾收集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33028964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档