如何检测phantomjs何时完成渲染?

如何检测phantomjs何时完成渲染?,phantomjs,rasterizing,Phantomjs,Rasterizing,我使用phantomjs将几个专门的html页面呈现为PDF;因为这是一项需要扩展的服务,所以我正试图尽可能减少开销。所有页面都是相同的结构,使用相同的CSS,并且在大多数方面都是相似的,所以我决定重用相同的html页面,只调用javascript来替换内容。这样,它就不必重新加载CSS和web字体等 为了让事情稍微复杂一点,我使用我使用phantom.js的webserver接口创建的rest接口从node.js控制渲染。web服务器工作得很好——如果我不重用该页面,那么一切都可以完美地工作

我使用phantomjs将几个专门的html页面呈现为PDF;因为这是一项需要扩展的服务,所以我正试图尽可能减少开销。所有页面都是相同的结构,使用相同的CSS,并且在大多数方面都是相似的,所以我决定重用相同的html页面,只调用javascript来替换内容。这样,它就不必重新加载CSS和web字体等

为了让事情稍微复杂一点,我使用我使用phantom.js的webserver接口创建的rest接口从node.js控制渲染。web服务器工作得很好——如果我不重用该页面,那么一切都可以完美地工作

我遇到的问题是,我无法知道何时可以(通过http连接)向node报告该文件已准备好使用

if (filename.substr(-4) == ".pdf") {
    p.paperSize = {format: 'Letter', orientation: 'portrait', margin: '1cm'};
}
// loadPage evaluates javascript in the page to have it load the contents
// of the url into its body; the callback is triggered by a console.log
// inside the page that tells us when the ajax request has finished and
// the content is ready to be rendered.
loadPage(p, url, function() {
    console.log("Loaded", url);
    p.render(filename);
    console.log("Rendered?", url);
    // sendJSON returns the response to the node client
    sendJSON(response, {filename: filename, status: "success"});
});
我的问题是在p.render完成之前调用sendJSON——它没有阻塞。老实说,考虑到这是javascript,我不希望它被阻塞,但它似乎也不接受回调函数来让我知道它何时完成


是否有人找到了此类问题的解决方案?

因此,它实际上是在渲染时阻塞的,但似乎不是,因为调用渲染时页面本身仍在加载$(窗口)。load本身做得不够,无法确保在响应之前加载css、字体和所有内容

对于任何其他想尝试这种方法的人来说,每次创建一个新页面似乎都要比创建一个新页面快一点,但是要想让时间都正确,这可能有点棘手