Tôi đang lập kế hoạch sử dụng dịch vụ web để sử dụng nội bộ, lấy một đối số, URL và trả về html đại diện cho giải quyết DOM từ URL đó. Bằng cách giải quyết tôi có nghĩa là webservice trước tiên sẽ nhận được trang tại URL đó, sau đó sử dụng PhantomJS để 'render' trang, và sau đó trả về nguồn kết quả sau khi tất cả các cuộc gọi DHTML, AJAX vv được thực hiện. Tuy nhiên, khởi chạy phantom trên cơ sở theo yêu cầu (mà tôi đang làm bây giờ) là cách quá chậm chạp. Tôi thà có một nhóm các phiên bản PhantomJS với một phiên bản luôn có sẵn để phục vụ cuộc gọi mới nhất tới dịch vụ web của tôi.Cách quản lý 'hồ bơi' của các phiên bản PhantomJS
Có công việc nào được thực hiện trên loại điều này trước đây không? Tôi muốn cơ sở này webservice trên công việc của người khác hơn là viết một quản lý hồ bơi/máy chủ proxy http cho bản thân mình từ đầu.
Bối cảnh khác: Tôi đã liệt kê 2 dự án tương tự mà tôi đã thấy từ trước đến nay và tại sao tôi tránh từng dự án, dẫn đến câu hỏi này về quản lý một nhóm phiên bản PhantomJS.
jsdom - từ những gì tôi thấy nó có chức năng tuyệt vời để thực thi tập lệnh trên trang nhưng không cố gắng sao chép hành vi của trình duyệt, vì vậy nếu tôi sử dụng nó làm mục đích chung "Trình phân giải DOM" ở đó d cuối cùng là rất nhiều mã hóa để xử lý tất cả các loại cạnh trường hợp, gọi sự kiện, vv Ví dụ đầu tiên tôi thấy là phải tự gọi hàm onload() của thẻ body cho ứng dụng thử nghiệm mà tôi đã thiết lập bằng nút . Nó có vẻ giống như sự bắt đầu của một lỗ thỏ sâu.
Selenium - Nó chỉ có nhiều bộ phận chuyển động hơn, vì vậy việc thiết lập một hồ bơi để quản lý các phiên bản trình duyệt tồn tại lâu dài sẽ phức tạp hơn việc sử dụng PhantomJS. Tôi không cần bất kỳ lợi ích ghi/ghi macro nào. Tôi chỉ muốn một webservice có vai trò như một người biểu diễn tại trang web và giải quyết DOM như thể tôi đang duyệt đến URL đó bằng trình duyệt (hoặc thậm chí nhanh hơn nếu tôi có thể làm cho nó bỏ qua hình ảnh, v.v.)
Bạn có biết cách thức hoạt động xếp hàng chi tiết? Tôi nghĩ rằng nó gọi nhiều yêu cầu XHR trong hàng đợi phải không?Tôi đang tìm một giải pháp thực sự giữ các tiến trình ảo hóa chạy như một daemon, thay vì xoay từng bước một nhiệm vụ đi vào. – CMCDragonkai
@CMCDragonkai Câu hỏi đề cập đến "một nhóm các trường hợp PhantomJS với một trường hợp luôn sẵn sàng để phục vụ cuộc gọi mới nhất tới dịch vụ web của tôi ", ngụ ý liên tục chạy các trình tiện ích PhantomJS, nhưng câu trả lời này sẽ hoạt động với cả hai trường hợp. Tất cả các chức năng 'async.queue' làm là đảm bảo không có nhiều hơn một số lượng nhất định các cuộc gọi đến chức năng là xuất sắc tại bất kỳ thời điểm nào; những gì bạn làm bên trong chức năng đó là tùy thuộc vào bạn. –
Bạn của tôi, gần 4 năm sau, đã cứu tôi khá đau đầu. – mgmcdermott