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