2013-03-28 236 views
18

我是新進入phantomjs,嘗試它在標準的centOS服務器上(安裝了httpd等,但沒有修改設置,除了名稱服務器設置爲8.8.8.8和8.8.4.4)。Phantomjs緩慢加載頁面

我使用默認的loadspeed.js文件(重命名它)。但是,頁面速度似乎非常緩慢。這裏有一個例子:

$ phantomjs phantomjs.js http://www.google.com/ 
starting 
Loading time 90928 msec 

$ phantomjs phantomjs.js http://173.194.67.138/ #(one of google's public ips) 
starting 
Loading time 30204 msec 

當我加載服務器(如http://something.be)上的任何URL,加載時是141msec:

$ phantomjs phantomjs.js http://something.be 
starting 
Loading time 141 msec 

有沒有人有一個線索是什麼原因導致我的連接是這樣慢?連接本身很好,wget需要幾秒鐘才能下載幾MB的文件。

此外,當我運行OSX完全相同的腳本對本地谷歌,這是輸出:

phantomjs phantomjs.js http://google.com/ 
starting 
Loading time 430 msec 

回答

23

找到它 - 好像IPv6是罪魁禍首。

我通過運行暫時禁用了下列文件:

echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 
echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6 

測試證實:

$ phantomjs phantomjs.js http://google.com 
starting 
Loading time 230 msec 
+3

將IPV6設置爲「僅限本地鏈接」適用於我。多煩人。 – steakchaser

+3

哇,我很好奇你是怎麼找到這個怪癖的。你應該得到這個發現的金牌。我從48秒到1秒。非常感謝 – JavierIEH

+1

關於ipv6沒有被分配到盒子這一事實的網絡和知識的一些知識幫助。 :) – QuintenVK

8

嗯,在我的情況下,頁面等待某個GET請求,並沒有能夠達到請求的服務器和它一直等待很長時間。當我使用遠程調試器選項時,我只能算出它。

phantomjs --remote-debugger-port=9000 loadspeed.js <some_url> 

和loadspeed.js內部文件

page.onResourceRequested = function (req) { 
    console.log('requested: ' + JSON.stringify(req, undefined, 4)); 
}; 

page.onResourceReceived = function (res) { 
    console.log('received: ' + JSON.stringify(res, undefined, 4)); 
}; 

,然後加載本地主機:在任何WebKit瀏覽器9000(Safari /鉻),並看到控制檯日誌,我可以弄清楚它正在等待一些失敗的請求很長一段時間。

繞過這個 - 減少超時:

page.settings.resourceTimeout = 3000; //in secs 

和事情之後非常快。希望這有幫助