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

Когда я загружаю любой URL-адрес на сервер (например, http://something.be ), время загрузки составляет 141 мс:

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

Кто-нибудь знает, что заставляет мое соединение быть таким медленным? С самим соединением все в порядке, wget загружает файл размером в несколько мегабайт за секунды.

Кроме того, когда я запускаю тот же самый скрипт на OSX локально для Google, это вывод:

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

person QuintenVK    schedule 28.03.2013    source источник


Ответы (2)


Нашел - вроде виноват 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
person QuintenVK    schedule 28.03.2013
comment
Установка для параметра IPV6 значения Link-local сработала только для меня. Как раздражает. - person steakchaser; 21.01.2014
comment
Вау, мне любопытно, как ты нашел эту причуду. За эту находку вы должны получить золотую медаль. Я увеличил от 48 секунд до 1 секунды. Большое спасибо - person JavierIEH; 30.11.2014
comment
Помогло некоторое знание сетей и знание того факта, что ipv6 не назначен ящику. :) - person QuintenVK; 30.11.2014
comment
Как отменить это изменение? (включить ipv6) - person Prakash GPz; 16.08.2015
comment
Сделайте то же самое с echo 0 вместо echo 1 - person A Fader Darkly; 22.05.2016
comment
Это должно войти в /etc/sysctl.conf как net.ipv6.conf.all.disable_ipv6 = 1 и применяться с sudo sysctl -p, чтобы сохраняться при перезагрузке. - person Nick; 25.08.2016

Ну, в моем случае страница ждала каких-то 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));
};

а затем загрузить localhost: 9000 в любом браузере webkit (safari/chrome) и просмотреть журналы консоли, где я мог понять, что он долго ждал некоторых неудачных запросов.

ЧТОБЫ ОБХОДИТЬ ЭТО - УМЕНЬШИТЕ ТАЙМ-АУТ:

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

и после этого все пошло очень быстро. Надеюсь это поможет

person Devaroop    schedule 13.11.2013