Как управлять «пулом» экземпляров PhantomJS

Я планирую веб-сервис для собственного внутреннего использования, который принимает один аргумент, URL-адрес, и возвращает html, представляющий разрешенныйDOM из этого URL-адреса. . Под разрешением я подразумеваю, что веб-служба сначала получит страницу по этому URL-адресу, затем использует PhantomJS для «рендеринга» страницы, а затем вернет полученный источник после выполнения всех вызовов DHTML, AJAX и т. д. Однако запуск фантома по запросу (что я и делаю сейчас) слишкоммедленный. Я бы предпочел иметь пул экземпляров PhantomJS, один из которых всегда доступен для обслуживания последнего вызова моего веб-сервиса.

Проводилась ли ранее какая-либо работа в этом направлении? Я предпочитаю основывать этот веб-сервис на работе других, чем писать менеджер пула/прокси-сервер http для себя с нуля.

Дополнительный контекст: я перечислил 2 похожих проекта, которые я видел ниже, и почему я избегал каждого из них, что привело к этому вопросу об управлении пулом экземпляров PhantomJS.

jsdom — из того, что я видел, у него отличные функциональные возможности для выполнения скриптов на странице, но он не пытается воспроизвести поведение браузера, поэтому, если бы я использовал его в качестве «преобразователя DOM» общего назначения, в итоге получается много дополнительного кода для обработки всех видов случаев краев, вызовов событий и т. д. Первый пример, который я увидел, — это необходимость вручную вызывать функцию onload() тега body для тестового приложения, которое я настроил с помощью node. Это было похоже на начало глубокой кроличьей норы.

Selenium. У него гораздо больше движущихся частей, поэтому настроить пул для управления долгоживущими экземплярами браузера будет сложнее, чем использовать PhantomJS. Мне не нужны какие-либо преимущества записи/скриптинга макросов. Мне просто нужен веб-сервис, который так же эффективен при получении веб-страницы и разрешении ее DOM, как если бы я просматривал этот URL-адрес с помощью браузера (или даже быстрее, если я могу заставить его игнорировать изображения и т. д.)

66
задан Trindaz 1 April 2012 в 01:41
поделиться