我使用CasperJS运行以下脚本,在通过阵列约三分之一的时间后,它开始用尽交换空间,机器变得非常慢。我在这里做错了什么?CasperJS内存不足
searchPages
是54个数字的数组,对应于搜索页面的URL值。
casper.each(searchPages,function(casper,index){
loadSearch(casper,index);
});
function loadSearch(casper,index){
var currentTime = new Date();
var month = currentTime.getMonth() + 2;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
var dateStart = month + "/" + day + "/" + year;
month = currentTime.getMonth() + 3;
var dateEnd = month + "/" + day + "/" + year;
casper.thenOpen(url,function(){
var myfile = "data-"+year + "-" + month + "-" + day+".html";
this.evaluate(function(j) {
document.querySelector('select[name="searchParameters.localeId"]').selectedIndex = j;
},index);
this.evaluate(function(start) {
$("#leaveDate").val(start);
},dateStart);
this.evaluate(function(end) {
$("#returnDate").val(end);
},dateEnd);
this.evaluate(function() {
$("#OSB_btn").click();
});
this.waitForSelector('#destinationForPackage', function() {
if (this.exists('#destinationForPackage')){
var name = casper.evaluate(function() {
return $("#destinationForPackage option[value='" + $("#destinationForPackage").val() + "']").text()
});
if (name != "Going To"){
if (name == null){
console.log("it's null");
}else{
name = name.replace("/","_");
casper.capture('Captures/Searches/search_' + name + '.jpg');
console.log("Capturing search_" + name);
}
}
}else{
console.log("Still doesn't exist...retry");
loadSearch(casper,index);
}
},function(){
console.log("Search page timed-out.");
},20000);
});
}
它增加了每个循环约3GB。
由于timeout参数设置为0,是不是只是立即调用该函数?我从来没有见过像那样使用setTimeout。 – TheValyreanGroup
由原来的问题,你的意思是我的其他职位?如果是这样,我爱听它。 – TheValyreanGroup
@TheValyreanGroup,它立即调用它,但在运行循环的下一回合中没有延迟,给当前调用一个弹出堆栈的机会。回复:最初的问题,我希望我知道在那里更有帮助。 – danh