18

我是 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

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

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

有谁知道是什么导致我的连接这么慢?连接本身很好,wget 需要几秒钟来下载几 MB 的文件。

此外,当我在本地 OSX 上为 Google 运行完全相同的脚本时,输出如下:

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

2 回答 2

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
于 2013-03-28T14:34:55.180 回答
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 浏览器(safari/chrome)中加载 localhost:9000 并查看控制台日志,我可以在其中发现它正在等待一些失败的请求很长时间。

绕过这个 - 减少超时:

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

在那之后事情进展得很快。希望这可以帮助

于 2013-11-13T06:29:22.793 回答