下面的腳本包含「links」數組中的一些URL。函數gatherLinks()
用於從「鏈接」數組中的URL的sitemap.xml中收集更多URL。一旦「鏈接」數組有足夠的URL(由變量「limit」決定),函數request()
被稱爲「links」數組中的每個URL,以向服務器發送請求並獲取響應。報告每個響應所需的時間。程序結束時會報告該程序佔用的總時間。PhantomJS 2.0.0 - 選擇:無效參數錯誤
我寫了一個PhantomJS程序(源代碼如下)發送一些請求並計算所花費的時間(以便比較2.0.0和1.9.8的性能)。我使用「links」數組硬編碼的網站的sitemap.xml文件獲取鏈接。
當使用PhantomJS 2.0.0,一些請求65後的程序(請求功能的方法page.open()
)開始輸出運行以下:
select: Invalid argument select: Invalid argument select: Invalid argument select: Invalid argument select: Invalid argument . . . .
當使用PhantomJS 1.9.8運行時,它在大約200崩潰請求出現以下錯誤。
「PhantomJS已經崩潰請務必閱讀正文https://github.com/ariya/phantomjs/wiki/Crash-Reporting崩潰報告指南,並在https://github.com/ariya/phantomjs/issues/new附有崩潰轉儲文件發送錯誤報告:/tmp/2A011800-3367-4B4A-A945-3B532B4D9B0F.dmp」
我試着發送崩潰報告,但他們的指南對我來說並不是很有用。
這不是我使用的網址,我嘗試過使用其他網址,但結果相同。
我的程序有問題嗎?我正在使用OSX。
var system = require('system');
var fs = require('fs');
var links = [];
links = [
"http://somesite.com",
"http://someothersite.com",
.
.
.
];
var index = 0, fail = 0, limit = 300;
finalTime = Date.now();
var gatherLinks = function(link){
var page = require('webpage').create();
link = link + "/sitemap.xml";
console.log("Fetching links from " + link);
page.open(link, function(status){
if(status != "success"){
console.log("Sitemap Request FAILED, status: " + status);
fail++;
return;
}
var content = page.content;
parser = new DOMParser();
xmlDoc = parser.parseFromString(content, 'text/xml');
var loc = xmlDoc.getElementsByTagName('loc');
for(var i = 0; i < loc.length; i++){
if(links.length < limit){
links[links.length] = loc[i].textContent;
} else{
console.log(links.length + " Links prepared. Starting requests.\n");
index = 0;
request();
return;
}
}
if(index >= links.length){
index = 0;
console.log(links.length + " Links prepared\n\n");
request();
}
gatherLinks(links[index++]);
});
};
var request = function(){
t = Date.now();
var page = require('webpage').create();
page.open(links[index], function(status) {
console.log('Loading link #' + (index + 1) + ': ' + links[index]);
console.log("Time taken: " + (Date.now() - t) + " msecs");
if(status != "success"){
console.log("Request FAILED, status: " + status);
fail++;
}
if(index >= links.length-1){
console.log("\n\nAll links done, final time taken: " + (Date.now() - finalTime) + " msecs");
console.log("Requests sent: " + links.length + ", Failures: " + fail);
console.log("Success ratio: " + ((links.length - fail)/links.length)*100 + "%");
phantom.exit();
}
index++;
request();
});
}
gatherLinks(links[0]);
在玩完程序之後,我找不到任何特定的模式來解決我在下面提到的問題。對於2.0.0,我只能成功發送300個請求而沒有錯誤。我嘗試了所有不同的URL組合,程序通常在請求50-80之間失敗。我維護一個失敗的URL日誌,當我使用另一個PhantomJS程序發送單個請求時,它們都運行良好。對於1.9.8,它更加穩定,下面我提到的崩潰不是很頻繁。但再一次,我找不到任何崩潰的模式,它偶爾還會崩潰。
我現在已經添加了腳本的說明。請看編輯2 :) @ArtjomB。 – Kakaji