我正在计划一个内部使用的web服务,它接受一个参数,一个URL,并从该URL返回代表解析的 DOM的html。通过解析,我的意思是web服务首先会在该URL上获取页面,然后使用PhantomJS来“呈现”该页面,然后在执行完所有DHTML,AJAX调用等之后返回生成的源代码。然而,在每个请求的基础上启动幻像(我现在正在做)是方式太慢了。我宁愿有一个PhantomJS实例池,其中一个始终可用来为我的web服务提供最新的调用。如何管理PhantomJS实例的“池”
之前有没有做过这方面的工作?我宁愿将这个web服务基于其他人的工作,而不是从头开始编写自己的池管理器/ http代理服务器。
更多上下文:我已经列出了两个类似的项目,我已经在下面看到了,并且为什么我避免了每个项目,结果导致这个关于管理PhantomJS实例池的问题。我从中可以看到它对于在页面上执行脚本具有很好的功能,但它不会尝试复制浏览器行为,所以如果我将它用作通用“DOM解析器”,那么“ d最终需要大量额外的编码来处理各种边界情况,事件调用等。我看到的第一个例子是,我必须手动调用我使用节点设置的测试应用程序的body标记的onload()函数。这似乎是一个深刻的兔子洞的开始。
Selenium - 它只有很多更多的移动部件,因此设置池来管理长期居住的浏览器实例将比使用PhantomJS更复杂。我不需要它的任何宏录制/脚本优势。我只是想要一个web服务,就像获取网页并解析它的DOM一样,就好像我正在用浏览器浏览该URL(或者如果我可以让它忽略图像等甚至更快)。
你知道怎么排队作品详细?我在想这是在队列中调用多个XHR请求吗?我正在寻找一种解决方案,它实际上保持phantomjs进程作为守护进程运行,而不是在每次任务进入时进行一次启动。 – CMCDragonkai 2013-10-01 03:37:27
@CMCDragonkai该问题提到“一个PhantomJS实例池始终可用于服务我的web服务的最新调用“,这意味着不断运行PhantomJS守护进程,但是这个答案适用于任何一种情况。所有的'async.queue'函数都确保在任何给定的时间不超过一定数量的函数调用未完成;你在这个功能里面做什么取决于你。 – 2013-10-01 03:41:52
你我的朋友,差不多4年后,让我非常头痛。 – mgmcdermott 2016-02-19 22:43:24