Phantomjs работает, но очень медленно

Я пытаюсь сделать скриншот веб-страницы с PhantomJS. В частности, я использую пример захвата espn.com из этого примера. Мой код выглядит следующим образом:

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

Затем я перехожу в свою папку PhantomJS с помощью моего терминала или командной строки и запускаю:

phantomjs shotty.js

Все работает отлично, однако для завершения выходного изображения требуется 6-8 секунд. Это нормально? Есть ли более быстрый способ выполнить это, чтобы он завершился через секунду или меньше?

Я использую CentOS и Windows 7. Оба блока имеют 8 ГБ оперативной памяти, 3,2 ГГц процессор, и я получаю 22 Мб/с и 1 Мбит/с на speedtest.net

Ответы

Ответ 1

Да, это нормально. Когда вы пытаетесь выполнить рендеринг, PhantonJS по-прежнему будет ждать события page.open, чтобы запустить событие load, чтобы показать, что загружена вся DOM.

Посмотрите, что происходит, когда я загружаю espn.com локально в свою систему. Для завершения DOMContentLoaded требуется ~ 2 секунды, а затем ~ 7 секунд для срабатывания события ready.

enter image description here

Ответ 2

Ну, в моем случае, страница ждала некоторых запросов GET и не смогла добраться до сервера запросов, и он долго ждал. Я мог только понять это, когда использовал опцию удаленного отладчика.

phantomjs --remote-debugger-port=9000 loadspeed.js <some_url>

и внутри файла loadpeed.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 (сафари/хром) и просмотрите журналы консоли, где я могу понять, что он долго ждал некоторых недостижимых запросов.

ОБРАТИТЬ ЭТО - СНИЖИТЬ ВРЕМЯ:

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

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

Ответ 3

Я не думал, что следующее будет работать, но для меня это было (в Windows):

откройте Internet Explorer > Свойства обозревателя > Соединения > Настройки локальной сети и отключите функцию "Автоматически определять настройки"

original Сообщение: https://plus.google.com/+MatthiasG%C3%B6tzke/posts/9v9BMCJj2k6