0

我正在使用 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 进程。

这是一种随机行为,如果我再次尝试使用相同的 URL,它会起作用。

服务器日志显示 XML 文件已正确传递,因此这不是服务器问题,而是客户端问题。

你能在“twitter.js”代码中看到竞争条件或在某些情况下会导致 phantomjs 锁定的东西吗?

4

1 回答 1

0

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

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

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

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

于 2016-04-29T02:33:10.737 回答