如何使用casper.page.close()来避免多页打开时的内存泄漏
How to use casper.page.close() to avoid memory leak for multiple page open
当我打开一个数组中的许多页面(以千为单位)时,似乎存在内存泄漏,因为我在Windows中监视进程内存。
我读了这篇文章,决定使用http://phantomjs.org/api/webpage/method/close.html
以下是代码
var casper = require("casper").create({
verbose: true,
logLevel: 'debug',
pageSettings: {
userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0'
}
}),
utils = require('utils');
casper.start();
casper.thenOpen('http://www.google.com/', function(response) {
this.echo(this.getTitle());
});
casper.then(function() {
casper.page.close();
});
casper.thenOpen('http://www.yahoo.com/', function(response) {
this.echo(this.getTitle());
});
casper.run(function() {
console.log('End');
casper.exit();
});
然而,它给了我一个错误:
Error: cannot access member `customHeaders' of deleted QObject
test:1182 in open
test:1555 in _step
test:1335 in runStep
test:332 in checkStep
那么,在打开另一个页面之前,如何每次关闭page
对象呢?或者更大的问题是如何防止Phantom.js中的内存泄漏?
我不确定我是否完全理解这种情况下发生的事情,但这里有一个解决问题的方法:
...
casper.then(function() {
casper.page.close();
casper.page = require('webpage').create();
});
casper.thenOpen('http://www.yahoo.com/', function(response) {
this.wait(1000, function() {
this.echo(this.getTitle());
});
});
...
close()-"关闭页面并释放与其关联的内存堆。调用后不要使用页面实例。"<-这来自phantomjs文档。如果你想继续打开网站,你需要创建一个新的页面实例。希望这能有所帮助!
相关文章:
- 重复应用 d3 转换导致的内存泄漏
- IE7中的blockUI插件内存泄漏25kb
- Javascript闭包-如何防止内存泄漏
- jQuery Draggable:内存泄漏
- "检测到可能的EventEmitter内存泄漏”;使用Gulp+Watchify+Factor捆绑包
- 在Dojo类中递归调用setTimeout时是否存在内存泄漏
- 是内存泄漏
- 将处理程序留在img.onload上是内存泄漏
- 具有并发sse连接的node.js内存泄漏
- 简单对象的Javascript内存泄漏
- WeakMap是否会将我从父/子关系的内存泄漏中拯救出来
- Javascript绘制画布内存泄漏
- 为什么我的svg节点在IE中泄漏内存
- AngularJS指令包装器与Kendo一起泄漏内存
- 经过几次清理尝试后,主干仍在泄漏内存
- 这个js代码如何泄漏内存
- 未处理的postMessage是否泄漏内存
- 动态创建和销毁三.js场景,而不会泄漏内存
- 我的PyV8上下文泄漏内存
- 为什么我的数字时钟功能泄漏内存