我使用phantomjs以PDF格式渲染AnyChart v6图表(http://6.anychart.com/)。
AnyChart v6图表由一个HTML文件组成,该文件通过Javascript库调用XML定义文件并将其呈现为SVG。
XML定义文件是即时复杂处理的结果,因此服务器可能需要几分钟才能将XML文件传送到Anychart javascript库。
我的问题是迫使phantomjs等待XML文件,所以我遇到了这个" twitter.js"脚本:
https://gist.github.com/cjoudrey/1341747
它完美无缺,但有时它会永远锁定phantomjs,唯一的方法就是杀死Linux进程。
这是一种随机行为,如果我再次尝试使用相同的网址。
服务器日志显示XML文件已正确传递,因此它不是服务器问题,而是客户端问题。
你能看到" twitter.js"中的竞争条件。在某些情况下会导致phantomjs锁定的代码?
答案 0 :(得分:0)
不是100%肯定,但可能与http://phantomjs.org/api/webpage/handler/on-resource-received.html
有关如果资源很大并且由服务器以多个块发送,则将为PhantomJS接收的每个块调用onResourceReceived。
注意"阶段:“开始”,“结束”(FIXME:中间块的其他值?)"
然而,forcedRenderTimeout无论如何都应该杀死一个页面。