Phantomjs工作但很慢

Chr*_*ris 16 javascript webpage-screenshot phantomjs

我试图用PhantomJS截取一个网页的截图.具体地讲,我使用捕获的示例espn.com这个例子.我的代码看起来像这样:

var page = new WebPage(); 
    page.open('http://www.espn.com', function (status) {
    page.render('fb.png');
    phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)

然后我使用我的终端或命令提示符转到我的PhantomJS目录并运行:

phantomjs shotty.js
Run Code Online (Sandbox Code Playgroud)

一切都运行良好,但完成输出图像需要6-8秒.这是正常的吗?有没有更快的方法来实现这一点,以便它在一秒或更短的时间内完成?

我使用的是CentOS和Windows 7.两个盒子都有8GB的RAM,3.2 GHz的CPU,我在speedtest.net上的速度下降了22Mbp/s,速度达到了1Mbp/s

Dev*_*oop 24

好吧,在我的情况下,页面正在等待一些GET请求,并且无法访问请求的服务器并且它一直等待很长时间.当我使用远程调试器选项时,我只能想出来.

phantomjs --remote-debugger-port=9000 loadspeed.js <some_url>
Run Code Online (Sandbox Code Playgroud)

并在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));
};
Run Code Online (Sandbox Code Playgroud)

然后在任何webkit浏览器(safari/chrome)中加载localhost:9000并查看控制台日志,我可以在其中找出它长时间等待一些无法访问的请求.

通过这个 - 减少超时:

page.settings.resourceTimeout = 3000; //in milliseconds
Run Code Online (Sandbox Code Playgroud)

之后事情很快.希望这可以帮助


Lay*_*yke 9

是的,这是正常的.当您尝试渲染时,PhantonJS仍将等待page.open事件触发load事件以表示已加载整个DOM.

看看我espn.com在系统上本地加载时会发生什么.DOMContentLoaded完成需要大约2秒钟,然后大约需要7秒ready才能触发事件.

在此输入图像描述