我们知道 node .js为我们提供了强大的力量,但强大的力量带来了巨大的责任.

据我所知,V8引擎不做任何垃圾收集.那么,为了确保我的 node 服务器没有内存泄漏,我们应该避免哪些最常见的错误呢.

EDIT:

推荐答案

据我所知,V8引擎没有

V8内置了一个强大而智能的垃圾收集器.

您的主要问题是不理解闭包如何维护对外部函数的范围和上下文的引用.这意味着有多种方法可以创建循环引用,或者创建只需清理not个变量的变量.

这是因为你的代码是ambigious,而编译器无法判断它是否是safe来进行垃圾收集.

强制GC获取数据的一种方法是将变量设置为null.

function(foo, cb) {
    var bigObject = new BigObject();
    doFoo(foo).on("change", function(e) {
         if (e.type === bigObject.type) {
              cb();
              // bigObject = null;
         }
    });
}

v8如何知道在事件处理程序中对大对象进行垃圾收集是否安全?但事实并非如此,所以您需要通过将变量设置为null来告诉它它不再被使用.

要阅读的各种文章:

Node.js相关问答推荐

EJS ForEach循环标记

Postgressql的BIGSERIAL自增序列,即使由于唯一约束错误没有创建行,也会自动增加

在父模式中设置默认值.

如何在套接字对象中存储或添加数据?

为什么运行 yarn 命令会出错 - yargs-parser的完整性判断失败

加速 sequelize ORM 中的查询

将 AllowDiskUse true 添加到 node.js 中的 MongoDB 聚合?

socket.io 发出回调合适吗?

Sequelize 基于关联的查找

如何运行用 TypeScript 编写的 Mocha 测试?

npm publish 导致'错误:EPERM:不允许操作,取消链接...',errno -4048

webpack css-loader 在外部样式表的 url() 引用中找不到图像

如何解决 Socket.io 404(未找到)错误?

- configuration.output.path:提供的值public不是绝对路径!使用 Webpack

Express js 阻止 GET /favicon.ico

从 node.js 连接到 mongodb 时出现 ECONNREFUSED 错误

如何创建安全(TLS/SSL)Websocket 服务器

Node.js 中的 PHP exit()/die() 类似功能是什么

nodemon + express,监听端口=?

deno vs ts-node:有什么区别