2015-08-23 39 views
0

爲什麼PhantomJS需要大量時間來加載頁面比其他模塊(如cURL和file_get_contents)?PhantomJS需要更多時間才能加載頁面而不是cURL

我試過用PhantomJS以及cURL加載谷歌。 cURL只需要20-50ms的加載時間,但PhantomJS花了730ms,即使load-images選項設置爲false。 PhantomJS緩慢的原因可能是什麼?

我已經測試了頁面加載的回調函數內部的時間差,立即。

這裏是我的代碼:

var page = require("webpage").create(); 
page.viewportSize = { width: 1024, height: 768 }; 

page.open('$url', function(status) { 
    console.log('PhantomJS load time:', Date.now() - start); 
    page.render('screenshot.png'); 
    phantom.exit(); 
}); 

什麼方法我可以用它來提高網頁加載速度,最大可能的範圍內,一般還是PhantomJS?

+0

你可以放棄加載一些資產,但然後你的屏幕截圖看起來搞砸了。 – pguardiario

回答

3

PhantomJS是一個完整的瀏覽器(無頭,但仍然是一個瀏覽器)。具有空緩存的完整瀏覽器需要執行許多請求才能獲取所有頁面資源,並等待呈現頁面。您可以使用--disk-cache=true選項讓PhantomJS爲後續請求緩存一些數據,但仍然會比cURL慢得多。

cURL只顯示一個請求而不顯示任何內容。當然,它更快,因爲它不是瀏覽器。

+0

感謝有關磁盤緩存的提示。我知道加載所有資源需要時間。但是可以在源代碼下載並構建DOM後立即運行回調嗎? –

+0

當調用'page.open()'回調函數時,PhantomJS文檔沒有明確說明,但根據我的經驗,只要加載了所有非異步資源並且構建了DOM,如果你想對頁面做一些有用的事情,那麼你應該等待整頁加載。如果你可以使用部分DOM,你可以嘗試使用['waitFor()'](https://github.com/ariya/phantomjs/blob/master/examples/waitfor.js)等待一個特定的元素在'page.open()'回調之外。 –

相關問題