我得到一個內存泄漏,我不知道爲什麼。它基於我以前編寫的腳本,它工作正常。我所做的只是更改變量的名稱並更改其中一個的值。Node.js內存泄漏?
這是代碼給我一個內存泄漏。
console.log("Mine plugin started.")
var mineflayer = require('mineflayer');
var vec3 = mineflayer.vec3;
module.exports.inject = inject;
function inject(bot) {
var Mine = false
bot.on('whisper', function (username, message) {
if (username == bot.username) return;
if (message == 'mine') {
Mine = true
gotoBlo()
}
if (message == 'stop') {
Mine = false
}
});
function gotoBlo() {
if (Mine = true) {
posBlo = bot.entity.position;
blockBlo = findBlock('diamond_ore', 8, posBlo);
if (blockBlo != null) {
var tempVar = vec3(blockBlo.position.x, blockBlo.position.y, blockBlo.position.z);
bot.scaffold.to(tempVar)
setTimeout(gotoBlo,5000)
}
}
}
function findBlock(type, size, point) {
var block = null;
var shortest = null;
var x1 = Math.floor(point.x - size);
var x2 = Math.floor(point.x + size);
var y1 = Math.floor(point.y - size);
var y2 = Math.floor(point.y + size);
var z1 = Math.floor(point.z - size);
var z2 = Math.floor(point.z + size);
//bot.chat(x1 + "");
for (x = x1; x < x2; x++) {
for (y = y1; y < y2; y++) {
for (z = z1; z < z2; z++) {
var cPoint = vec3(x, y, z);
var cBlock = bot.blockAt(cPoint);
//bot.chat(cPoint + "");
if (cBlock) {
//bot.chat(cBlock.name);
if (cBlock.name == type) {
if ((shortest > cPoint.distanceTo(point)) || shortest == null) {
shortest = cPoint.distanceTo(point);
block = cBlock;
}
}
}
}
}
}
return block;
}
}
這裏的代碼工作正常。
console.log("Defuse plugin started.")
var mineflayer = require('mineflayer');
var vec3 = mineflayer.vec3;
module.exports.inject = inject;
function inject(bot) {
var Disarm = false
bot.on('whisper', function (username, message) {
if (username == bot.username) return;
if (message == 'defuse') {
disarm = true
gotoTNT()
}
if (message == 'stop') {
disarm = false
}
});
function gotoTNT() {
if (disarm = true) {
posTNT = bot.entity.position;
blockTNT = findBlock('tnt', 32, posTNT);
if (blockTNT != null) {
var tempVar = vec3(blockTNT.position.x, blockTNT.position.y, blockTNT.position.z);
bot.scaffold.to(tempVar)
setTimeout(gotoTNT,5000)
}
}
}
function findBlock(type, size, point) {
var block = null;
var shortest = null;
var x1 = Math.floor(point.x - size);
var x2 = Math.floor(point.x + size);
var y1 = Math.floor(point.y - size);
var y2 = Math.floor(point.y + size);
var z1 = Math.floor(point.z - size);
var z2 = Math.floor(point.z + size);
//bot.chat(x1 + "");
for (x = x1; x < x2; x++) {
for (y = y1; y < y2; y++) {
for (z = z1; z < z2; z++) {
var cPoint = vec3(x, y, z);
var cBlock = bot.blockAt(cPoint);
//bot.chat(cPoint + "");
if (cBlock) {
//bot.chat(cBlock.name);
if (cBlock.name == type) {
if ((shortest > cPoint.distanceTo(point)) || shortest == null) {
shortest = cPoint.distanceTo(point);
block = cBlock;
}
}
}
}
}
}
return block;
}
}
此代碼有多處錯誤。如「撤防」和「撤防」不匹配。並且,假設「if(disarm = true)'應該是'if(disarm == true)',因爲你擁有的東西永遠是真的。你也有一堆隱含的全局變量,這很糟糕,比如你的'for'循環中的'x','y'和'z'。你應該用'var'或'let'聲明所有的變量。 – jfriend00
請準確描述你如何確定你實際上有內存泄漏。誤診泄漏是非常常見的,所以首先要確定是否確實有泄漏。 – jfriend00
https://gyazo.com/fcbf3bfa560a91ca02ba88d644fb4304 – Ezcha