在PhantomJS中进行延迟渲染的脚本,有时会永远锁定phantomjs

时间:2016-04-28 09:37:33

标签: phantomjs anychart

我使用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锁定的代码?

1 个答案:

答案 0 :(得分:0)

不是100%肯定,但可能与http://phantomjs.org/api/webpage/handler/on-resource-received.html

有关

如果资源很大并且由服务器以多个块发送,则将为PhantomJS接收的每个块调用onResourceReceived。

注意"阶段:“开始”,“结束”(FIXME:中间块的其他值?)"

然而,forcedRenderTimeout无论如何都应该杀死一个页面。