我正在計劃一個內部使用的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