2015-08-23 32 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()'回调之外。 –

相关问题