我使用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