Я планирую веб-сервис для собственного использования внутри, который принимает один аргумент, URL-адрес и возвращает html, представляющий DOM с этого URL-адреса. По разрешению я имею в виду, что вебсервис сначала получит страницу по этому URL-адресу, а затем использует PhantomJS для «рендеринга» страницы, а затем возвращает результирующий источник после того, как будут выполнены все DHTML, AJAX-вызовы и т. Д. Однако запуск фантома по принципу запроса (который я делаю сейчас) - это способ слишком вялый. Я бы предпочел иметь пул экземпляров PhantomJS, один из которых всегда был доступен для обслуживания последнего вызова моего веб-сервиса.Как управлять «пулом» экземпляров PhantomJS
Проделана ли какая-либо работа по этому поводу раньше? Я предпочел бы основывать этот веб-сервис на работе других, чем писать пул-менеджер/HTTP-прокси-сервер для себя с нуля.
Подробнее Контекст: Я перечислил 2 похожих проекта, которые я видел до сих пор ниже, и почему я избегал каждого из них, в результате чего возникает вопрос об управлении пулом экземпляров PhantomJS.
jsdom - из того, что я видел, у него отличная функциональность для выполнения скриптов на странице, но он не пытается реплицировать поведение браузера, поэтому, если бы я использовал его как универсальный «DOM resolver», d в конечном итоге является большим количеством дополнительного кодирования для обработки всех видов случаев краев, вызова событий и т. д. В первом примере, который я видел, нужно вручную вызвать функцию onload() тега body для тестового приложения, которое я настроил с помощью узла , Казалось, что начало глубокой кроличьей дыры.
Selenium - У этого есть намного больше движущихся частей, поэтому настройка пула для управления долговечными экземплярами браузера будет сложнее, чем использование PhantomJS. Мне не нужны какие-либо из преимуществ макросъемки/создания сценариев. Я просто хочу, чтобы веб-сервис, который так же эффективен при получении веб-страницы и разрешал его DOM, как если бы я просматривал этот URL-адрес с помощью браузера (или даже быстрее, если бы я мог игнорировать изображения и т. Д.)
Вы знаете, как в организации очередей работы в деталях? Я думаю, что он вызывает несколько запросов XHR в очереди правильно?Я ищу решение, которое фактически поддерживает процессы phantomjs, запущенные как демон, вместо того, чтобы вращать их каждый раз, когда возникает задача. – CMCDragonkai
@CMCDragonkai В этом вопросе упоминается, что «пул экземпляров PhantomJS с одним, всегда доступным для обслуживания последний звонок на мой веб-сервис », что подразумевает постоянный запуск демонов PhantomJS, но этот ответ будет работать в любом случае. Вся функция 'async.queue' делает это, чтобы в любой момент времени было не более определенного количества вызовов функции; то, что вы делаете внутри этой функции, зависит от вас. –
Вы, мой друг, почти 4 года спустя, избавили меня от головной боли. – mgmcdermott