Phantomjs缓慢加载页面

Qui*_*nVK 18 connection phantomjs

我是phantomjs的新手,在标准的centOS服务器上尝试(安装了httpd等,但除了名称服务器设置为8.8.8.8和8.8.4.4之外没有修改过的设置).

我正在使用默认的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
Run Code Online (Sandbox Code Playgroud)

当我在服务器上加载任何URL(例如http://something.be)时,加载时间为141毫秒:

 $ phantomjs phantomjs.js http://something.be
 starting
 Loading time 141 msec
Run Code Online (Sandbox Code Playgroud)

有没有人知道是什么导致我的连接变慢?连接本身很好,wget需要几秒钟才能下载几MB的文件.

此外,当我在OSX本地运行OSX上完全相同的脚本时,这是输出:

 phantomjs phantomjs.js http://google.com/
 starting
 Loading time 430 msec
Run Code Online (Sandbox Code Playgroud)

Qui*_*nVK 23

发现它 - 似乎ipv6是罪魁祸首.

我通过运行以下命令暂时禁用它:

echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 
echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6
Run Code Online (Sandbox Code Playgroud)

测试证实:

$ phantomjs phantomjs.js http://google.com
starting
Loading time 230 msec
Run Code Online (Sandbox Code Playgroud)

  • 将IPV6设置为"仅限链接本地"对我有用.多烦啊 (3认同)
  • 哇,我很好奇你是怎么发现这个怪癖的.你应该为这个发现获得一枚金牌.我从48秒变为1秒.非常感谢 (3认同)

Dev*_*oop 8

好吧,在我的情况下,页面正在等待一些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 secs
Run Code Online (Sandbox Code Playgroud)

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